[python爬虫]bug汇总

一.python error之re模块的findall与match错误

命名py脚本时,不要与python预留字,模块名等相同,即Python文件名不要使用Python系统库的名字,就是因为使用了Python系统库的名字,所以在编译的时候才会产生.pyc文件。正常的Python文件在编译运行的时候是不会产生.pyc文件的!

这类问题的解决方法则是:更改python脚本的命名,不要与python系统库重合即可

二.爬取图片保存的数据形式错误:TypeError: write() argument must be str, not bytes

fw=open(filename,‘w’)和fr=open(filename,‘r’)改为fw=open(filename,‘wb’)和fr=open(filename,‘rb’)
b就是二进制

三.OpenSSL.SSL.Error: [(‘SSL routines’, ‘tls_process_server_certificate’, ‘certificate verify failed’)](ssl证书问题)

因为网址使用了https,所以经过代理时会报错。解决办法是:关闭验证SSL证书开关,verify:Ture/False,默认是Ture,用于验证SSL证书开关。例如:requests.get(url=url,headers=headers,verify=False)但是这样发送请求后,虽然有数据,但是还是会报错(

C:\Program Files\Python37\lib\site-packages\urllib3\connectionpool.py:847: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
InsecureRequestWarning)

),这个时候还要加一条requests.packages.urllib3.disable_warnings(),即禁用安全请求警告。

import requests
 
requests.packages.urllib3.disable_warnings()
url =
 
 
headers = {
    
    
}
 
response = requests.get(url=url,headers=headers,verify=False)
print(response.text)

四.书写文件保存路径出错:python SyntaxError: EOL while scanning string literal

错误原因是,字符串以 \ 结尾 或者字符串缺少引号。

写代码拼接windows 路径出现这个错误, 查资料才知道 python中字符串不能以 \ 结尾
方法一 : 使用 os.path.join

path = os.path.join(r'C:\Users\panda\Desktop\新建文件夹', dirname)

方法二:路径的反斜杠使用转义 而不用 r

path = 'C:\\Users\\panda\\Desktop\\新建文件夹\\' + dirname

方法三:格式化字符串

dirname="test"
path = r'C:\Users\panda\Desktop\新建文件夹\%s' % (dirname)  # 第一种格式化方法
#从 python 2.6 开始
path = r'C:\Users\panda\Desktop\新建文件夹\{}'.format(dirname) # 第二种格式化方法

方法四: string interpolation (字符串内插)

 #python 3.6 开始 支持string interpolation
dirname = "test"
path3 = rf'C:\Users\panda\Desktop\新建文件夹\{dirname}' 

五.拼接字符问题:TypeError: can only concatenate str (not “int”) to str

python中,拼接字符串较为特殊,需要以

正确写法为:
 
msg = '我有%d'%(self.num) + '个苹果'
 
 
错误写法为:
msg = '我有' + (self.num) + '个苹果'

六.爬取网页数据出现中文乱码 UTF-8中文乱码

在用python爬取网页数据时,获取的中文数据出现乱码情况

第一种情况:

  没有声明编码格式,即没有进行  encoding = 'utf-8'  编码声明

  例如下图,在获取数据中<span> 里中文出现乱码:
<li><em>00:00</em><span>±±Æ½Õ½ÓëºÍ(20)</span></li>
<li><em>00:10</em><span>±±Æ½Õ½ÓëºÍ(21)</span></li>
<li><em>00:57</em><span>±±Æ½Õ½ÓëºÍ(22)</span></li>

这类解决办法是:加上 encoding = ‘utf-8’ 即可

s = requests.get(url)
s.encoding = 'utf-8'

第二种情况:

已经进行编码声明 encoding = ‘utf-8’ 但还是出现中文乱码
解决办法:检查网页编码,更正编码声明,如:encoding = ‘GBK’
出现这样的情况时,就要检查一下抓取网页页面的编码格式,网页的编码不一定是 UTF-8 格式的,也有可能是 GBK、GB2312、GB18030等格式

s = requests.get(url)
s.encoding = 'GBK'

声明编码为GBK格式后,数据中的中文数据恢复正常

参考:https://blog.csdn.net/lbyd2016/article/details/84667299
https://www.cnblogs.com/lonkiss/p/python-eol-while-scanning-string-literal.html
https://blog.csdn.net/Big_Head_Gentleman/article/details/81516012
https://blog.csdn.net/feng2147685/article/details/86494905

猜你喜欢

转载自blog.csdn.net/qq_44308180/article/details/107323250