【问题标题】:Scrapy TCP connection timed out issue in pythonpython中的Scrapy TCP连接超时问题
【发布时间】:2020-02-06 04:47:11
【问题描述】:

我在 python 中的“start_requests”函数中有一个问题。我正在使用代理和端口从另一个站点抓取数据。但我得到了:

[scrapy.extensions.logstats] 信息:抓取 1 页(0 页/分钟),抓取 0 项(0 项/分钟) [scrapy.downloadermiddlewares.retry] 调试:重试http://....../>(失败2次):TCP连接超时:110:连接超时。

我的代码是:

def get_proxy(self):
    self.conn = MySQLdb.connect(
        settings['MYSQL_HOST'],
        settings['MYSQL_USER'],
        settings['MYSQL_PASSWD'],
        settings['MYSQL_DBNAME'],
        charset = "utf8", use_unicode = True)
    self.cursor = self.conn.cursor()
    try:
        results = self.cursor.execute("SELECT proxy, port FROM geme_proxies WHERE is_active = '1' AND is_deleted = '0' ORDER BY RAND() LIMIT 1" )               
        if results > 0:
           row = self.cursor.fetchone()
           return row
        else:
          return

    except Exception, e:
      logger.error('Exception Message: '+ str(e))

def start_requests(self):
    proxy_data = self.get_proxy();
    urls = [settings['OBERWIL_NEWS_URL']]
    for url in urls:
        request =  scrapy.Request(url = url, callback = self.parse)
        request.meta['proxy'] = 'http://' + proxy_data[0] + ':' + proxy_data[1]
        proxy_user_pass = settings['PROXY_USERNAME'] + ':' + settings['PROXY_PASSWORD']
        encoded_user_pass = base64.encodestring(proxy_user_pass)
        request.headers['Proxy-Authorization'] = 'Basic ' + encoded_user_pass
        yield request

请帮我解决这个问题。

【问题讨论】:

    标签: python-3.x


    【解决方案1】:

    我相信,这不是在您的代码中使用代理的正确方法。 (免费)代理经常死机或变得无关紧要而没有任何警告,并且由于您使用单个代理来加载所有 URL,如果第一个随机选择的代理有任何问题,您最终会遇到错误。

    更好的方法是使用“轮换代理”:

    pip install scrapy-rotated-proxy
    

    这将允许您透明地轮换代理,而无需自己处理中间进程。该方法只需要安装存储库,然后逐步更新代理列表(文件:proxylist.txt)。

    使用激活:

    'rotating_proxies.middlewares.RotatingProxyMiddleware': 610,
    'rotating_proxies.middlewares.BanDetectionMiddleware': 620
    

    proxylist.txt:

    165.22.50.208:8080
    139.180.163.43:3128
    14.207.137.192:8080
    

    旋转代理还具有从文件切换到数据库的选项,以及其他有用的选项,可进一步针对目标网站优化您的爬虫。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-04
      • 1970-01-01
      • 2013-12-30
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      相关资源
      最近更新 更多