报错|TCP connection timed out: 10060: 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。

运行爬虫时报错如下:
TCP connection timed out: 10060: 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。
原因:你的代理IP过期或者代理IP有问题,导致request.meta[‘proxy’] = random.choice(PROXIES_NEW[http]) 后 request带着这个IP根本无法访问服务器,被挡在外面!(from douban.settings import PROXIES_LIST 这个请根据你自己的文件路径来!)我的错误是因为我只放了IP:112.85.168.96。却忽略了前面的http://以及后面的端口!
解决办法:在scrapy框架里的settings文件先设置好proxy_list

PROXIES_LIST = { 'http':[ 'http://112.85.168.96:9999', 'http://1.197.203.234:9999', 'http://120.83.106.228:9999' ], 'https':[ 'https://223.241.78.23:808', 'https://112.85.171.126:9999' ]

在middlewares文件里设置RandomProxy类和 import PROXIES_LIST
from douban.settings import PROXIES_LIST import randomclass RandomProxy(object): def process_request(self, request, spider): http = request.url.split('://')[0] request.meta['proxy'] = random.choice(PROXIES_LIST[http])

在settings文件里开启 donwloader_middlewares 中间件:
DOWNLOADER_MIDDLEWARES = { # 'douban.middlewares.DoubanDownloaderMiddleware': 543, 'douban.middlewares.RandomProxy': 541 }

最后运行爬虫即可, 我是运行成功了。只是在Windows的pycharm里总是报这个错:UnicodeEncodeError: ‘gbk’ codec can’t encode character xxx
请问有谁知道这个怎么破呀???用Windows编程就是麻烦,不如Linux方便。
【报错|TCP connection timed out: 10060: 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。】还有我在爬取的过程中即使成功了也偶尔会报上面的错误:由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。说明免费的代理IP有些是不靠谱的,早就失效了还展示出来,所以最好买要付费的代理IP。

    推荐阅读