scrapy无法抓取craigslist

scrapy无法抓取craigslist,scrapy,rules,web-crawler,Scrapy,Rules,Web Crawler,同样的代码在yellowbook中爬行,没有任何问题,正如预期的那样。将规则更改为CL,它会命中第一个url,然后在没有相关输出的情况下蹒跚而行 from scrapy.contrib.spiders import CrawlSpider, Rule from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor from scrapy.selector import HtmlXPathSelector from craigs.i

同样的代码在yellowbook中爬行,没有任何问题,正如预期的那样。将规则更改为CL,它会命中第一个url,然后在没有相关输出的情况下蹒跚而行

from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from craigs.items import CraigsItem

class MySpider(CrawlSpider):
        name = "craigs"
        allowed_domains = ["craiglist.org"]

        start_urls = ["http://newyork.craigslist.org/cpg/"]

        rules = [Rule(SgmlLinkExtractor(restrict_xpaths=('/html/body/blockquote[3]/p/a',)), follow=True, callback='parse_profile')]

        def parse_profile(self, response):
                found = []
                img = CraigsItem()
                hxs = HtmlXPathSelector(response)
                img['title'] = hxs.select('//h2[contains(@class, "postingtitle")]/text()').extract()
                img['text'] = hxs.select('//section[contains(@id, "postingbody")]/text()').extract()
                img['tags'] =  hxs.select('//html/body/article/section/section[2]/section[2]/ul/li[1]').extract()

                print found[0]
                return found[0]
这是输出 如您所见,获取第一个要爬网的url没有问题http://newyork.craigslist.org/mnh/cpg/3600242403.html> 但后来死了

我可以使用CLI并转储所有类似于SGMLLinkedExtractor的链接(restrict_xpath=('/html/body/blockquote[3]/p/a')。使用XPath或关键字SGMLLinkedExtractor(allow=r'/cpg/+')提取链接(响应)。提取链接(响应)
输出->


但在爬网中,相同的查询失败。WTF???

如果查看文档,您将看到

允许的\u域包含以下域的字符串的可选列表: 这只蜘蛛可以爬行。请求不属于的URL 如果出现以下情况,将不遵循此列表中指定的域名 OffItemIDdleware已启用

您允许的域是

 allowed_domains = ["craiglist.org"]
但您正在尝试获取子域

02-07 15:39:03+0000 [craigs] DEBUG: Filtered offsite request to 'newyork.craigslist.org': <GET http://newyork.craigslist.org/mnh/cpg/3600242403.html>
02-07 15:39:03+0000[craigs]调试:过滤到“newyork.craigslist.org”的场外请求:
这就是它被过滤的原因


从爬网程序中删除
允许的\u域
,在爬网程序中添加适当的域,以避免过滤的异地请求

在比较CLI操作与“是否”恢复数据时,tcpdump数据包捕获,或者将爬网操作与“不”恢复数据进行比较。你可以清楚地看到craigslist“正在”放弃数据。在GET之后,我从URL接收了大量http数据。但在爬行过程中,scrapy对它没有任何作用。这100%看起来像是一个微不足道的/(用户)端错误。我被卡住了。脚本运行并执行起始URL的第一个GET,数据按预期从CL接收。但是,无论scrapy SGMLLinkedExtractor在调试中说了什么,都不会有第二个GET请求离开NIC。[craigs]调试:过滤到“newyork.craigslist.org”的异地请求:Scrapy说会发生这种情况,但tcpdump讲述了另一个故事。我的解析“确实”起作用。但是数据收集永远不会执行???@user1544207别忘了接受答案,这样其他人就可以从这篇文章中获益(可以通过点击下面的勾号接受这个答案)