文章目录
-
-
- 1. 无法连接至pypi开源网站
- 2. SSLError: wrong version number
- 3. UnicodeEncodeError
- 4. VS Code OUTPUT里无法输入
- 5. 无法加载文件 E:\SpiderPractice\venv\Scripts\Activate.ps1
- 6. 伪造User-Agent
- 6. FakeUserAgentError
- 7. BeautifulSoup中文乱码
- 8. lxml.etree.XMLSyntaxError
- 9. Running setup.py install for pycrypto ... error
- 10. TypeError: string indices must be integers
- 11. 写进csv格式每个字符都会后面加一个逗号
- 12. 写进csv每行都会多一个空行
-
1. 无法连接至pypi开源网站
记录:起初无法通过pip install requests下载因为python的开源网站被墙了翻不过去,所以添加了一个安装包;
解决方法:也可以使用其他开源镜像网站,比如清华、阿里。
$ pip install pywinauto -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
2. SSLError: wrong version number
报错信息:在写好爬虫脚本后就出现了以下
requests.exceptions.SSLError: HTTPSConnectionPool(host='www.sogou.com', port=443): Max retries exceeded with url: /web?querry=%E5%91%A8%E6%9D%B0%E4%BC%A6 (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1076)')))
解决方法:
关闭代理服务器,在登录搜狗浏览器时,我是随机启动sidecar加速器。
❓TODO:服务代理器会对URL访问有什么影响?
3. UnicodeEncodeError
报错信息:输入一个页面带汉字的网址后,爬取页面显示打印处出错
UnicodeEncodeError: 'gbk' codec can't encode character '\xbb' in position 103672: illegal multibyte sequence
报错原因:
使用utf-8遇见中文时会出现乱码,应更改为gb18030.
1.UTF-8:即国际通用字符编码,该编码方式囊括了世界各个国家及地区使用的字符集,尤其是对于英文字母的表示方法仅占用一个字节,很好的支持了欧美等国家的需要。优点:为了统一世界上各种编码而设计,通用性强。缺点:为了兼顾世界所有语言的字符,必须采用多位给字符编号,例如中文字符采用3字节编码方式,而gb18030采用2字节。
2.gb18030:是新出的国家标准。这个标准由国家强制执行(也是为了保证中国信息业的地位,以及争取一定的主动权),所以所有在中国大陆销售的操作系统必须支持gb18030。现在的Gb18030不仅包含了简体和繁体汉字,支持中国少数名族文字,还包含了日韩等国的象形文字。优点:兼容性好,与以前的国标码都兼容。缺点:对英文字母需要2个字节的编码。
解决方法:
import io
import sys
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='gb18030')
4. VS Code OUTPUT里无法输入
解决方法:
# 1.settings
# 2.搜索 run in terminal
# 3.在Run In Terminal前面打钩即可
# 4.然后程序就会在终端运行并可以输入
5. 无法加载文件 E:\SpiderPractice\venv\Scripts\Activate.ps1
报错信息:
& : 无法加载文件 E:\SpiderPractice\venv\Scripts\Activate.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的about_Execution_Policies
报错原因:
win10默认的执行策略是不载入任何配置文件,不运行任何脚本。
解决方法:
$ get-executionpolicy #查看策略权限,
$ Set-ExecutionPolicy -Scope CurrentUser RemoteSigned #修改策略
参考链接:CSDN
6. 伪造User-Agent
报错信息:在获取豆瓣高分电影时IP被封
# IP请求次数过多 请登录豆瓣
解决方法:获取伪造UA的库
$ pip install fake-useragent #终端输入的pip install直接下载到当前文件夹 要复制到c盘的sites-pakage下面
from fake_useragent import UserAgent #不然这里会报红
ua = UserAgent()
ua.random
6. FakeUserAgentError
报错信息:最前面的信息也是有用的,每个错误都会报出详细的类型,虽然错误类型可能一样,但错误原因不一定都相同,解决问题的时候还是要看清别人解决方案解决的是什么问题,不要盲目尝试浪费时间。对症下药。
Error occurred during loading data. Trying to use cache server https://fake-useragent.herokuapp.com/browsers/0.1.11
...
raise FakeUserAgentError('Maximum amount of retries reached')
fake_useragent.errors.FakeUserAgentError: Maximum amount of retries reached
解决方案:
# 1. ctrl+click 信息中的网址:https://fake-useragent.herokuapp.com/browsers/0.1.11
# 2. 获取到页面信息,保存到当前python的临时存储路径中,查看路径方法:
import tempfile
print(tempfile.gettempdir())
# 3. 命名为fake_useragent_0.1.11.json
参考链接:CSDN 解决FakeUserAgentError
7. BeautifulSoup中文乱码
原代码:
page_text = requests.get(url=get_url, headers=headers).text
soup = BeautifulSoup(page_text, 'lxml')
解决方法:将text换成content 就能解决乱码。当然还有一些其他方式。
page_text = requests.get(url=get_url, headers=headers).content
soup = BeautifulSoup(page_text, 'lxml')
8. lxml.etree.XMLSyntaxError
报错信息:
lxml.etree.XMLSyntaxError: Specification mandates value for attribute itemscope, line 2, column 27
报错原因:
html代码书写不规范,不符合xml解析器的使用规范
解决方法:
parser = etree.HTMLParser(encoding='utf-8')
tree = etree.parse('pagecontent.html', parser=parser)
9. Running setup.py install for pycrypto … error
报错信息:在执行安装pycrypto失败
Running setup.py install for pycrypto ... error
ERROR: Command errored out with exit status 1:
解决方法:
pip install pycryptodome
10. TypeError: string indices must be integers
报错信息:用json按key访问时出现问题, 原因是text获取的是字符串不是json
print(response_json['current'])
TypeError: string indices must be integers
解决方法:
#主动加载成json格式
response = requests.post(url=post_url, data=data, headers=headers).text
response_json = json.loads(response)
response_list = response_json['list']
#直接以json格式获取
response = requests.post(url=post_url, data=data, headers=headers).json()
print(response['list'])
11. 写进csv格式每个字符都会后面加一个逗号
原代码:writerow接收元组,如果传进去的是一个字符串,一个字符串也是一堆字符串,每个字符都会加 ,
for row in response['list']:
info = row['prodName']+row['avgPrice']+row['place']+row['unitInfo']
csvwriter.writerow(info)
解决方法:换成元组传进去
for row in response['list']:
info = (row['prodName'], row['avgPrice'], row['place'], row['unitInfo'])
csvwriter.writerow(info)
12. 写进csv每行都会多一个空行
**解决方法:**加入newline=’ ’
f = open('vegetablesPrice.csv', mode='w', encoding="utf-8", newline='')