爬虫的疑难杂症【第一期】

本文主讲:在爬虫过程中遇到的编码解码问题、发送请求错误、写正则的技巧、字符串列表字典之间的互转、浏览器抓包犯病等等问题~

获取响应数据出现编码的问题

报错提示:

UnicodeDecodeError: ‘gb18030’ codec can’t decode byte 0xa1 in position 32952: illegal multibyte sequence

报错翻译:’gb18030’编解码器无法解码位置32952中的字节0xa1:非法的多字节序列

报错原因:有的字节使用 gb18030 字符集解码时是无效的

解决办法:在解码方法 decode()里面加上参数 ignore,即可忽略不能解码的字符!!

办法截图:

image-20211013091115228

注意事项:中国对字符进行解码有三种字符集,分别是 gbk、gb2312、gb18030,其中gb18030是最强的解码字符集,gb2312不能解的,gb18030可以解!

向网站服务器发送请求时错误(捕获异常)【网络问题】

报错提示:<urlopen error [Errno 11001] getaddrinfo failed>

报错翻译:<urlopen错误[Errno 11001] getaddrinfo失败>

报错原因:因为网络(网络不稳定)原因或者url地址的原因出现错误

解决办法:死循环加上捕获异常即可解决此问题

解决代码:

1
2
3
4
5
6
7
while True
try
html_data = urllib.request.urlopne(url = url)
except Exception as result:
print( f "出现错误:{result} 将继续执行此代码!")
else:
break

else功能:当try下面的代码不报错时执行else下面缩进的代码!

解决代码截图:

image-20211013091147002

写正则的技巧【重中之重】

目标:掌握在 html 源代码中提取数据写正则的技巧

一:在 html 源代码中提取数据写正则的技巧

答:写正则提取数据之前,先不要查看网站源代码,先检查查看提取的数据在哪个标签内,把这个标签直接复制到文本文档内,在写正则即可!!!

注意事项:

1:在写正则的时候一定不要出现这种情况→→→→ .*? (.*?) 也就是两个.*?连在一起的情况!!

2:需要提取的数据 前一个标签与后一个标签一定不能省略!(一定要写)

字符串、列表、字典之间的相互转化【重点】

列表与字符串之间的相互转换

列表转换为字符串方法:“”. join(列表)

图示:

image-20211013091209950

字典与字符串的相互转换

转换所用到的标准库 json 库

字典转为字符串方法:json.dumps(带转换字典)

图示:

image-20211013091220349

字符串转为字典的两种方法:

1:dict = eval( s ) 其中 s 为字典格式的字符串

2:json.loads(s) 其中 s 为字典格式的字符串

图示:

一般方法

image-20211013091237813

Json.loads方法转换

image-20211013091244244

将字典转换为字符串之后写入到文件内中文出现乱码的问题!

字典转字符串的方法:json.dumps(带转换字典)

问题截图:

image-20211013091252739

解决问题:

将 json.dumps()方法内的 ensure_ascii 参数值改为 False 即可(默认为True)

图示:

image-20211013091301518

浏览器抓包时犯病怎么解决

浏览器清除缓存快捷键:Ctrl + Shift + Del 【如果浏览器犯病就试试这个快捷键】

未完待续……