scrapy无法抓取craigslist
同样的代码在yellowbook中爬行,没有任何问题,正如预期的那样。将规则更改为CL,它会命中第一个url,然后在没有相关输出的情况下蹒跚而行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
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别忘了接受答案,这样其他人就可以从这篇文章中获益(可以通过点击下面的勾号接受这个答案)