欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【Python爬虫建立IP池错误】爬取西刺网出现的各种问题

程序员文章站 2022-06-23 18:09:38
...

本想爬取一个网站,但由于访问次数多了,遭服务器拒绝。后面就行通过建立一个IP池,当然就想爬取西刺网上的IP。所以就在网上copy了一份代码,但很不幸的是不管怎么弄都无法运行。所以我开始简化代码,从爬取网页所有HTML开始,但还是会出现同样的问题。开始以为是header设置有问题,然后我把网页的request header全部放入还是不行。后面各种查贴,百度,最后找到了一个可以运行的方法,但还是不太稳定。如果有大神还希望指点一二。具体简化代码如下:

#coding=utf-8
import requests
import time
import socket
from fake_useragent import UserAgent
import random

url = 'http://www.xicidaili.com/nn/'
Useragent = UserAgent()
headers = {'User-agent': Useragent.random,
           'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
          'Cookie': '_free_proxy_session=BAh7B0kiD3Nlc3Npb25faWQGOgZFVEkiJTY0ODc0MDY5MmNmNzg1MTc1ZmE0YWU0MTBmNjMzYTBlBjsAVEkiEF9jc3JmX3Rva2VuBjsARkkiMU92TlJxY1VrSHYwQitYK2tlMndIcjc5Ri9RakNHNlFJNFBWOElmeGtVT2M9BjsARg%3D%3D--7bcec64718e213fcef8a57eb9edf574d9da90e1a; Hm_lvt_0cf76c77469e965d2957f0553e6ecf59=1588450066,1588491491,1588496139; Hm_lpvt_0cf76c77469e965d2957f0553e6ecf59=1588496826',
           'Accept-Encoding': 'gzip',
           'Accept-Language': 'zh-CN,zh;q=0.9',
           'Host': 'www.xicidaili.com',
           'If-None-Match': 'W/"931674d5aeb5fbdd6d2f5ffab2e543e1"',
           'Upgrade-Insecure-Requests': '1',
           'Cache-Control': 'max-age=0',
           'Sec-Fetch-Dest': 'document',
           'Sec-Fetch-Mode': 'navigate',
           'Sec-Fetch-Site':'none',
           'Sec - Fetch - User': '?1',
           'Referrer Policy': 'no - referrer - when - downgrade',
           'Referer': 'https://www.xicidaili.com/nn/2',
           'Connection':'close'
           }
# proxies_list = [
#      {"http": "218.249.45.162:35586"},
#  {"http": "	183.166.253.239:6666"}
#
# ]
proxies = { "http": "http://218.249.45.162:35586", "https": "http://183.166.253.239:6666"}
# proxies = random.choice(proxies_list)
# proxies = {'http': None, 'https': None}
# s = requests.session()
# s.config['keep_alive'] = False
response = requests.get(url=url, headers=headers, proxies=proxies, timeout=10)
print(response.text)

1.proxies = { “http”: “http://218.249.45.162:35586”, “https”: “http://183.166.253.239:6666”}
开始不能直接访问,后面想要建立一个IP池来访问。但运行出现ConnectTimeout,我设置timeout=10,感觉已经很长时间了,但还是报错误。应该是由于代理服务器访问缓慢或者不稳定造成。还有可能是我浏览器设置问题。这个没有查到好的解决方案。

requests.exceptions.ConnectTimeout: HTTPConnectionPool(host='218.249.45.162', port=35586): Max retries exceeded with url: http://www.xicidaili.com/nn/ (Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x000002A0A10ACA58>, 'Connection to 218.249.45.162 timed out. (connect timeout=10)'))

2.proxies_list = [{“http”: “218.249.45.162:35586”}, {“http”: " 183.166.253.239:6666"}]
proxies = random.choice(proxies_list)
这个解决思路同1,也是建立Ip池来爬取,结果还是失败。

requests.exceptions.ConnectTimeout: HTTPConnectionPool(host='218.249.45.162', port=35586): Max retries exceeded with url: http://www.xicidaili.com/nn/ (Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x000002B3949FCA90>, 'Connection to 218.249.45.162 timed out. (connect timeout=10)'))

3.ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。
这个问题再最开始运行时会出现,已经忘了什么原因造成的。但也按这篇文章更改https://blog.csdn.net/shuiyixin/article/details/100527573
但我发现我的电脑配置是正确的,我就按这个思路关闭我google自带的代理器,也不知道对爬取有多少帮助。

4.proxies = {‘http’: None, ‘https’: None} 配合 header = {‘Connection’:‘close’}
这个是由于代理IP无法正确爬取,后面我按一篇文章采用用系统IP去爬取,并更改header中的connection,这才成功的爬取到HTML。
【Python爬虫建立IP池错误】爬取西刺网出现的各种问题
但是过一会再用运行就会出现,也就是说4这个方法也不太稳定:

总结,会出现两种错误,一种服务器拒绝,二种连接超时。暂时用第4中方法,如果大神能指定一下,不甚感激。

相关标签: python