scrapy规则不调用解析方法

时间:2018-11-22 19:12:32

标签: python scrapy scrapy-spider

我不熟悉scrapy,并且正在尝试爬网域,跟随所有内部链接,并使用/example/.*模式抓取url的标题。

抓取有效,但由于输出文件为空,因此无法抓取标题。很可能我弄错了规则。这是使用规则的正确语法,以实现我想要的吗?

import scrapy
class BidItem(scrapy.Item):
    url = scrapy.Field()
    title = scrapy.Field()

spider.py

import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule

from bid.items import BidItem

class GetbidSpider(CrawlSpider):
    name = 'getbid'
    allowed_domains = ['domain.de']
    start_urls = ['https://www.domain.de/']

    rules = (
        Rule(
            LinkExtractor(), 
            follow=True
        ),
        Rule(
            LinkExtractor(allow=['example/.*']), 
            callback='parse_item'
        ),
    )

    def parse_item(self, response):
         href = BidItem()
         href['url']    = response.url
         href['title']  = response.css("h1::text").extract()
         return href

抓取:scrapy抓取getbid -o 012916.csv

1 个答案:

答案 0 :(得分:2)

来自CrawlSpider docs

  

如果多个规则与同一链接匹配,则将使用第一个规则,   根据在此属性中定义的顺序。

由于您的第一个规则将匹配所有链接,因此将始终使用它,而所有其他规则将被忽略。

解决问题就像切换规则顺序一样简单。