Scrapy、privoxy 和 Tor:SocketError:[Errno 61] 连接被拒绝

2024-03-10

我将 Scrapy 与 Privoxy 和 Tor 一起使用。这是我之前的问题Scrapy 与 Privoxy 和 Tor:如何更新 IP https://stackoverflow.com/questions/45009940/scrapy-with-privoxy-and-tor-how-to-renew-ip/45010141?noredirect=1#comment77037968_45010141,这是蜘蛛:

from scrapy.contrib.spiders import CrawlSpider
from scrapy.selector import Selector
from scrapy.http import Request

class YourCrawler(CrawlSpider):
    name = "****"
    start_urls = [
    'https://****.com/listviews/titles.php',
    ]
    allowed_domains = ["****.com"]

    def parse(self, response):
        # go to the urls in the list
        s = Selector(response)
        page_list_urls = s.xpath('///*[@id="tab7"]/article/header/h2/a/@href').extract()
        for url in page_list_urls:
            yield Request(response.urljoin(url), callback=self.parse_following_urls, dont_filter=True)

        # Return back and go to bext page in div#paginat ul li.next a::attr(href) and begin again
        next_page = response.css('ul.pagin li.presente ~ li a::attr(href)').extract_first()
        if next_page is not None:
            next_page = response.urljoin(next_page)
            yield Request(next_page, callback=self.parse)

    # For the urls in the list, go inside, and in div#main, take the div.ficha > div.caracteristicas > ul > li
    def parse_following_urls(self, response):
        #Parsing rules go here
        for each_book in response.css('main#main'):
            yield {
                'editor': each_book.css('header.datos1 > ul > li > h5 > a::text').extract(),
            }

在 settings.py 中,我有一个用户代理轮换和 privoxy:

DOWNLOADER_MIDDLEWARES = {
        #user agent
        'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware' : None,
        '****.comm.rotate_useragent.RotateUserAgentMiddleware' :400,
        #privoxy
        'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 110,
        '****.middlewares.ProxyMiddleware': 100
    }

在 middlewares.py 中我添加了:

from stem import Signal
from stem.control import Controller

def _set_new_ip():
    with Controller.from_port(port=9051) as controller:
        controller.authenticate(password='tor_password')
        controller.signal(Signal.NEWNYM)

class ProxyMiddleware(object):
    def process_request(self, request, spider):
        _set_new_ip()
        request.meta['proxy'] = 'http://127.0.0.1:8118'
        spider.log('Proxy : %s' % request.meta['proxy'])

如果我取出def _set_new_ip():middlewares.py 中类的方法(以及对它的调用class ProxyMiddleware(object):蜘蛛工作了。但我希望蜘蛛每次都能调用一个新的IP,这就是我添加它的原因。问题是每次我尝试运行蜘蛛时都会返回错误SocketError: [Errno 61] Connection refused,带有此回溯:

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/site-packages/twisted/internet/defer.py", line 1386, in _inlineCallbacks
    result = g.send(result)
  File "/usr/local/lib/python2.7/site-packages/scrapy/core/downloader/middleware.py", line 37, in process_request
    response = yield method(request=request, spider=spider)
  File "/Users/nikita/scrapy/***/***/middlewares.py", line 71, in process_request
    _set_new_ip()
  File "/Users/nikita/scrapy/***/***/middlewares.py", line 65, in _set_new_ip
    with Controller.from_port(port=9051) as controller:
  File "/usr/local/lib/python2.7/site-packages/stem/control.py", line 998, in from_port
    control_port = stem.socket.ControlPort(address, port)
  File "/usr/local/lib/python2.7/site-packages/stem/socket.py", line 372, in __init__
    self.connect()
  File "/usr/local/lib/python2.7/site-packages/stem/socket.py", line 243, in connect
    self._socket = self._make_socket()
  File "/usr/local/lib/python2.7/site-packages/stem/socket.py", line 401, in _make_socket
    raise stem.SocketError(exc)
SocketError: [Errno 61] Connection refused
2017-07-11 15:50:28 [scrapy.core.engine] INFO: Closing spider (finished)

也许问题出在使用的端口上with Controller.from_port(port=9051) as controller:,但我不确定。如果有人有一个想法那就太好了……

EDIT---

好的,如果我转到浏览器并转到http://127.0.0.1:8118/ http://127.0.0.1:8118/,它说:

503 
This is Privoxy 3.0.26 on localhost (127.0.0.1), port 8118, enabled
Forwarding failure
Privoxy was unable to socks5-forward your request http://127.0.0.1:8118/ through localhost: SOCKS5 request failed

Just try again to see if this is a temporary problem, or check your forwarding settings and make sure that all forwarding servers are working correctly and listening where they are supposed to be listening.

所以可能与SOCKS5的配置有关......有人知道吗?


我的猜测是:

  1. Tor 未运行。要确保 Tor 是否正在运行,请运行ps (e.g., ps -ax | grep tor) and netstat(例如,对于 Mac:netstat -an | grep 'your tor portnumber'。对于 Linux,替换-an with -tulnp)在终端上查看 Tor 是否真正运行。
  2. 您没有正确设置转发设置。根据 503 错误消息,您似乎没有正确设置转发规则(如果 Tor 正在运行)。在 Privoxy 的配置文件中,确保forward-socks5t / 127.0.0.1:9050 .未注释。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Scrapy、privoxy 和 Tor:SocketError:[Errno 61] 连接被拒绝 的相关文章

随机推荐

  • CSS :lang 伪类与属性选择器

    我想编写一个 css 规则 该规则将使用不同的引号来表示不同语言的引号 我知道lang是一个HTML属性 那么为什么我不能使用下面的css属性选择器呢 下面的代码不应该针对所有q and blockqutote元素内部的元素lang属性具有
  • Tensorflow:如何将自定义输入插入现有图形?

    我已经下载了一个实现 VGG16 ConvNet 的张量流 GraphDef 我用它来执行以下操作 Pl images tf placeholder tf float32 None 448 448 3 name images batch x
  • 如何将 Func 转换为 Predicate

    是的 我见过this https stackoverflow com questions 665494 c why funct bool instead of predicatet但我找不到我的具体问题的答案 给定一个 lambda测试La
  • 会话cookie=cookie?

    我想知道 cookie 和会话 cookie 是否相同 饼干就是饼干 会话 cookie 可以指以下两种情况之一 未指定超时时间的 cookie 浏览器关闭后将被丢弃 IE 浏览器只会为当前的 浏览会话 保留它 包含会话 ID 的 cook
  • Log4Net 多个项目

    我在用log4net在我们的解决方案之一中 该解决方案包含多个项目 每个项目一个单元测试项目 我正在使用中描述的方法这个帖子 http blog falafel com Blogs josh eastburn 2012 04 10 usin
  • Mathematica 中的语法着色

    用户定义的函数符号如f in f x 2 x 或变量符号 例如lotto in lotto Table 2 10 自动着色 在 M8 上的语法着色中 没有为此提供选项 仅限未分配值的局部变量或全局符号 这并不完全是您所要求的 但可能对您有用
  • Apache POI 使用 HSSF 比使用 XSSF 快得多 - 接下来做什么?

    我在解析时遇到了一些问题 xlsx带有 Apache POI 的文件 我得到java lang OutOfMemoryError Java heap space在我部署的应用程序中 我只处理 5MB 以下的文件和大约 70 000 行 因此
  • Silverlight 中的动画边距变化

    我正在 Silverlight 中对边框大小进行动画调整 但是我还需要逐渐删除其周围的边距 当前为 50 Blend 似乎不会为边距变化生成补间 它只是一次性从 50 跳到 0 有办法实现这一点吗 问题是边距实际上是 System Wind
  • 普罗米修斯时间序列在没有更新的情况下持续多长时间

    如果我向 Prometheus 发送一个仪表 则有效负载具有时间戳和如下值 指标名称 标签 值 2 0 16239938546837 如果我在普罗米修斯上查询它 我可以看到一条连续的线 如果不发送相同指标的有效负载 线路就会停止 几分钟后发
  • 从Firebase android获取孩子ID [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我对 Android 开发非常陌生 我正在使用 Firebase 开发一个 Android 应用程序来获取一个人的姓名和地址 我的数据
  • 如何在 javascript 中将日期时间字符串的格式从使用斜杠改为使用连字符?

    我有一个以下格式的输入日期字符串 yyyy mm dd 这是我想要的输出日期字符串格式 yyyy mm dd Javascript 有内置的方法可以做到这一点吗 Use 字符串替换 https developer mozilla org e
  • 如何使用 Javascript Date 对象计算东部时间?

    我正在开发一个涉及 Javascript 的个人项目 作为该项目的一部分 我想获取当前日期 包括时间 并相应地显示它 没什么大不了的吧 嗯 deal是我想返回时间和日期东部夏令时间 无论 IP 在世界哪个地方 如果这是不可能的 您建议采用哪
  • C# 多屏幕视图单一表单

    我用 C 创建了一个 GUI 它应该如下所示 主屏幕上有两个按钮 当Button1被单击我不想使用打开新表单form2 show 但在保持相同形式的同时 我想更改显示 我通过隐藏 GUI 元素并根据需要显示其他元素来完成此操作 它按照我想要
  • 如何重命名项目中的 Rails 控制器和模型

    我启动了一个 Rails 应用程序 一切正常 但现在 我想重命名控制器和关联的模型 我想改变Corps控制器到Stores模型也相同 没有最后的 s 在谷歌上查看 人们建议销毁然后重新生成控制器和模型 问题是它会删除每个文件的实际代码 解决
  • 如何在gemspec文件中指定依赖gem的路径?

    我创建了一个 gem X 但它没有发布 现在我正在创建另一个 gem 它将添加 gem X 作为依赖项 如下所示 s add dependency X 在 gemspec 文件中 由于 gem X 不在 ruby gem 或 git 或 r
  • 如果用户正在键入,则延迟 KeyUp 操作 (C#)

    我有一个当用户在搜索框中键入内容时被调用的函数 我想在实际执行该函数之前等待用户完成输入 我知道如何在 JavaScript 中通过超时轻松完成此操作 但是我如何在 C 中做同样的事情呢 另外 在假设用户完成输入之前我应该 等待多长时间 1
  • 如何排除 Sbt 中的传递依赖(在程序集插件的上下文中)?

    我有两个 Sbt 项目 我的共享空间 and 我的服务 我的共享空间 与依赖关系 libraryDependencies Seq nz ac waikato cms weka attributeSelectionSearchMethods
  • 无法将嵌套应用程序中的自定义 Django 模型指定为 AUTH_USER_MODEL

    我无法指定自定义AUTH USER MODEL如果该模型位于nested应用 这是一些项目结构 project settings py my parent app init py apps py my child app init py a
  • JUnit:如何避免测试实用程序类中的“无可运行方法”

    我已经从JUnit3 8切换到JUnit4 4 我使用 ant 运行测试 所有测试都成功运行 但测试实用程序类失败并出现 无可运行方法 错误 我使用的模式是在测试文件夹下包含名为 Test 的所有类 我知道运行程序找不到任何用 Test 属
  • Scrapy、privoxy 和 Tor:SocketError:[Errno 61] 连接被拒绝

    我将 Scrapy 与 Privoxy 和 Tor 一起使用 这是我之前的问题Scrapy 与 Privoxy 和 Tor 如何更新 IP https stackoverflow com questions 45009940 scrapy