我不熟悉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
答案 0 :(得分:2)
如果多个规则与同一链接匹配,则将使用第一个规则, 根据在此属性中定义的顺序。
由于您的第一个规则将匹配所有链接,因此将始终使用它,而所有其他规则将被忽略。
解决问题就像切换规则顺序一样简单。