python爬虫使用代理ip或请求头的问题
在request库中使用代理ip实例如下
headers = {
'User-Agent':
'Mozilla/5.0 (Windows NT 6.1;
WOW64;
rv:30.0) Gecko/20100101 Firefox/30.0',
'Connection':
'keep-alive',
'Cookie':
'session-id=130-1833310-5969908;
session-id-time=2082787201l;
',
'referer':
'https://www.amazon.com/s/ref=nb_sb_noss?field-keywords=%E7%94%B5%E8%84%91&ie=UTF8&language=zh_CN&url=search-alias%3Daps'
}# 设置代理ip
proxies = {
'http': 'http://110.52.235.150:9999',
'https': 'https://58.137.62.133:80'
}
list_html = requests.get(
'https://www.amazon.com/s/ref=nb_sb_noss?field-keywords=' + keywords +
'&ie=UTF8&language=zh_CN&url=search-alias%3Daps',
timeout=timeout,
headers=headers,
proxies=proxies,
)
可能会遇到的问题
一、 Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝,无法连接。')))
这种情况是爬取目标对本机进行反爬导致, 目前暂时考虑两种:
ip封锁导致: 解决的关键在于cookie携带还有ip更替, (cookie携带下, 对ip的封锁频率会降低)
请求头referer属性: 部分页面向下访问时会携带referer记录从哪个页面跳转, 有些反爬针对referer进行检测, 如果没有携带或者携带错误会大大增加封锁率
请求头用户代理: 二、Cannot connect to proxy.', NewConnectionError('
这种情况是由于使用的代理ip失效而无法再连接的问题, 可以使用cmd安装tcping命令对ip + 端口进行有效性检查
三、'Connection to 121.61.3.9 timed out. (connect timeout=10)'))
这种情况是由于使用的代理ip连接失效或者连接过于久, 使得超过了程序设定的时间, 可以不设置request的timeout属性以达到最大时间看看是否代理ip失效问题。
使用代理ip池开源工具scylla
目前有很多ip池以接口方式提供, 付费或者免费的都有 由于本人还是学生, 暂时使用免费的开源项目scylla来获取代理ip
【python爬虫使用代理ip或请求头的问题】具体scylla配置参考我另一篇文章scylla
推荐阅读
- 由浅入深理解AOP
- 【译】20个更有效地使用谷歌搜索的技巧
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- MybatisPlus使用queryWrapper如何实现复杂查询
- python学习之|python学习之 实现QQ自动发送消息
- 逻辑回归的理解与python示例
- python自定义封装带颜色的logging模块
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- iOS中的Block