【问题标题】:Can't make scrapy crawl不能让scrapy爬行
【发布时间】:2014-03-30 16:17:53
【问题描述】:

我试图了解 Scrapy 的工作原理,但不知道如何让它爬行。

我要抓取的网站有一个页面http://www.example.com/Jason,其中包含http://www.example.com/Jason:Aronhttp://www.example.com/Jason:Dan_De等格式的链接。

我设法爬取了像http://www.example.com/Jason:Aron 这样的页面上的文本,但我无法从http://www.example.com/Jason 开始爬取所有链接到那里的页面。

这是我的蜘蛛:

from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import Selector

from tutorial.items import Item

class Spider(CrawlSpider):
    name = "text"
    allowed_domains = ["example.com"]
    start_urls = [
        "http://www.example.com/Jason",
        "http://www.example.com/Jason:Aron",
    ]

    rules = (Rule (SgmlLinkExtractor(allow=('Jason:*')), callback='parse'),)

    def parse(self, response):
        sel = Selector(response)
        sites = sel.xpath('//div[@class="textbox"]')
        items = []
        for site in sites:
            item = Item()
            item['text'] = site.xpath('text()').extract()
            items.append(item)
        return items

感谢任何建议。

【问题讨论】:

  • 注意Jason:* 是一个正则表达式(匹配JasonJason:Jason::,...)。是你的意思吗?

标签: python web-scraping scrapy


【解决方案1】:

使用CrawlSpider时,最好不要覆盖parse()方法:

在编写爬虫规则时,避免使用 parse 作为回调,因为 CrawlSpider 使用 parse 方法本身来实现其逻辑。所以如果你重写 parse 方法,爬虫将不再工作。

callback="parse" 更改为callback="parse_item",然后重试。

【讨论】:

  • 该死的,我错过了。将callback="parse" 更改为callback="parse_item"def parse(self, response): 更改为def parse_item(self, response): 使其完美运行。谢谢。
猜你喜欢
  • 2013-01-24
  • 2015-10-18
  • 2014-12-31
  • 1970-01-01
  • 2019-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多