当前位置: 首页 > 知识库问答 >
问题:

忽略对特定域的请求

程钧
2023-03-14

我试图爬过craiglist的论坛类别。组织机构(https://forums.craigslist.org/).我的蜘蛛:

class CraigslistSpider(scrapy.Spider):
    name = "craigslist"
    allowed_domains = ["forums.craigslist.org"]
    start_urls = ['http://geo.craigslist.org/iso/us/']

    def error_handler(self, failure):
        print failure

    def parse(self, response):
        yield Request('https://forums.craigslist.org/',
                  self.getForumPage,
                  dont_filter=True,
                  errback=self.error_handler)

    def getForumPage(self, response):
        print "forum page"

我通过错误回调收到以下消息:

[失败实例:Traceback:: /usr/local/lib/python2.7/site-packages/twisted/internet/defer.py: 455:回调 /usr/local/lib/python2.7/site-packages/twisted/internet/defer.py:563:_startRunCallbacks /usr/local/lib/python2.7/site-packages/twisted/internet/defer.py:649:_runCallbacks /usr/local/lib/python2.7/site-packages/twisted/internet/<--plhd#######################################################################################################################################process_request /usr/local/lib/python2.7/site-packages/twisted/internetdefer.py:649_runCallbacks /usr/local/lib/python2.7/site-packages/scrapy/downloadermiddlewaresrobotstxt.py:46process_request_2]

但我只有在Craigslist的论坛部分才有这个问题。这可能是因为论坛部分的https与网站的其他部分相反。所以,不可能得到回应。。。

一个主意?

共有2个答案

羊丰茂
2023-03-14

我想你正在处理robots.txt。试着运行你的蜘蛛

custom_settings = {
    "ROBOTSTXT_OBEY": False
}

您也可以使用命令行设置来测试它:scrapy抓取craigslist-sROBOTSTXT_OBEY=False

郑宏朗
2023-03-14

我发布了一个我找到的解决方案来解决这个问题。

我使用了urllib2库。看:

import urllib2
from scrapy.http import HtmlResponse

class CraigslistSpider(scrapy.Spider):
name = "craigslist"
allowed_domains = ["forums.craigslist.org"]
start_urls = ['http://geo.craigslist.org/iso/us/']

def error_handler(self, failure):
    print failure

def parse(self, response):
    # Get a valid request with urllib2
    req = urllib2.Request('https://forums.craigslist.org/')
    # Get the content of this request
    pageContent = urllib2.urlopen(req).read()
    # Parse the content in a HtmlResponse compatible with Scrapy
    response = HtmlResponse(url=response.url, body=pageContent)
    print response.css(".forumlistcolumns li").extract()

有了这个解决方案,您可以在一个有效的Scrapy请求中解析一个好的请求,并使用这个普通方法。可能有一种更好的方法,但这种方法是有效的。

 类似资料:
  • 忽略域名 您可能要从mitmproxy的拦截机制中免除部分流量的主要原因有两个: 证书固定:使用证书固定保护某些流量, 而mitmproxy的拦截会导致错误。例如,如果mitmproxy处于活动状态,则Twitter应用程序,Windows Update或Apple App Store无法工作。 便利性:您实际上并不关心某些流量,而只是希望它们消失。请注意,在这里,mitmproxy的Limit选

  • 使用ESLint是否可以忽略整个目录的一个特定规则? 在我的例子中,我想忽略为一个名为的目录

  • 我有一个游戏角色,它位于一个棱柱形关节的中心,只能垂直移动(跳跃)。在初始化时,我在屏幕上加载各种游戏障碍,当“产生”时,这些障碍会从屏幕外向角色移动。最好我想用cocos2d位置更新来控制游戏障碍运动的重新定位,而不是box 2d速度控制。 基本上,我希望我的游戏角色能对游戏障碍做出反应,但我不希望游戏障碍对游戏角色做出反应,我希望能够在box 2d之外改变游戏障碍的位置。 我试着只更新游戏角色

  • 问题内容: 我正在使用以下选项 在bash脚本中停止执行错误。我有大约100行脚本正在执行,并且我不想检查脚本中每一行的返回码。 但是对于一个特定的命令,我想忽略该错误。我怎样才能做到这一点? 问题答案: 解决方案: 例: 将永远不会打印。 另外,我想补充一点,当打开时,如果管道中的命令之一具有非零退出代码(关闭该命令必须是最后一个),shell认为整个管道具有非零退出代码就足够了。