我正在尝试抓取Erowid并收集有关体验的数据。我试图从有关毒品的一般信息到实际经验本身。

但是,LinkExtractor似乎不起作用。

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

from Erowid.items import ErowidItem


class ExperiencesSpider(CrawlSpider):
    name = "test"
    allowed_domains = ["www.erowid.org"]
    start_urls = ['https://www.erowid.org/experiences/subs/exp_aPVP.shtml']
    rules = [
        Rule(LinkExtractor(allow =('/experiences/exp.php?ID=[0-9]+')),     callback = 'parse_item', follow = True)

    ]
    def parse_item(self, response):
        [other code]


我正在尝试从https://www.erowid.org/experiences/subs/exp_aPVP.shtml获得具有href的经验

/experiences/exp.php?ID=  (some digits)


我在找到ID后找不到正确的代码,并且已经尝试了各种不同的正则表达式,包括

\d+ and [0-9]+


错误是由不正确的正则表达式引起的吗?如果是,那么正确的正则表达式将是什么?如果没有,那么为什么会发生此错误,我该如何解决?

最佳答案

这是对我有用的表达式:

/experiences/exp\.php\?ID=\d+$


这是rules的外观:

rules = [
    Rule(LinkExtractor(allow=r'/experiences/exp\.php\?ID=\d+$'),
         callback='parse_item', follow=True)
]

10-07 15:39