爬虫的疑难杂症【第一期】
本文主讲:在爬虫过程中遇到的编码解码问题、发送请求错误、写正则的技巧、字符串列表字典之间的互转、浏览器抓包犯病等等问题~
获取响应数据出现编码的问题
报错提示:
UnicodeDecodeError: ‘gb18030’ codec can’t decode byte 0xa1 in position 32952: illegal multibyte sequence
报错翻译:’gb18030’编解码器无法解码位置32952中的字节0xa1:非法的多字节序列
报错原因:有的字节使用 gb18030 字符集解码时是无效的
解决办法:在解码方法 decode()里面加上参数 ignore,即可忽略不能解码的字符!!
办法截图:
注意事项:中国对字符进行解码有三种字符集,分别是 gbk、gb2312、gb18030,其中gb18030是最强的解码字符集,gb2312不能解的,gb18030可以解!
向网站服务器发送请求时错误(捕获异常)【网络问题】
报错提示:<urlopen error [Errno 11001] getaddrinfo failed>
报错翻译:<urlopen错误[Errno 11001] getaddrinfo失败>
报错原因:因为网络(网络不稳定)原因或者url地址的原因出现错误
解决办法:死循环加上捕获异常即可解决此问题
解决代码:
1 | while True: |
else功能:当try下面的代码不报错时执行else下面缩进的代码!
解决代码截图:
写正则的技巧【重中之重】
目标:掌握在 html 源代码中提取数据写正则的技巧
一:在 html 源代码中提取数据写正则的技巧
答:写正则提取数据之前,先不要查看网站源代码,先检查查看提取的数据在哪个标签内,把这个标签直接复制到文本文档内,在写正则即可!!!
注意事项:
1:在写正则的时候一定不要出现这种情况→→→→ .*? (.*?)
也就是两个.*?
连在一起的情况!!
2:需要提取的数据 前一个标签与后一个标签一定不能省略!(一定要写)
字符串、列表、字典之间的相互转化【重点】
列表与字符串之间的相互转换
列表转换为字符串方法:“”. join(列表)
图示:
字典与字符串的相互转换
转换所用到的标准库 json 库
字典转为字符串方法:json.dumps(带转换字典)
图示:
字符串转为字典的两种方法:
1:dict = eval( s ) 其中 s 为字典格式的字符串
2:json.loads(s) 其中 s 为字典格式的字符串
图示:
一般方法
Json.loads方法转换
将字典转换为字符串之后写入到文件内中文出现乱码的问题!
字典转字符串的方法:json.dumps(带转换字典)
问题截图:
解决问题:
将 json.dumps()方法内的 ensure_ascii 参数值改为 False 即可(默认为True)
图示:
浏览器抓包时犯病怎么解决
浏览器清除缓存快捷键:Ctrl + Shift + Del 【如果浏览器犯病就试试这个快捷键】
未完待续……