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 random

class 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方便。

还有我在爬取的过程中即使成功了也偶尔会报上面的错误:由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。说明免费的代理IP有些是不靠谱的,早就失效了还展示出来,所以最好买要付费的代理IP。

你可能感兴趣的:(报错,python具体知识点讲解)