【发布时间】:2015-11-11 17:22:14
【问题描述】:
我正在抓取 Erowid 并尝试从该站点收集数据。我编码的蜘蛛
import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from scrapy.selector import HtmlXPathSelector
class ExperiencesSpider(CrawlSpider):
name = "experiences"
allowed_domains = ["www.erowid.org"]
start_urls = ['https://www.erowid.org/experiences/exp_list.shtml']
rules = [
Rule(LinkExtractor(allow =('subs/exp_\w+.shtml')), follow = True)
]
def parse_item(self, response):
pass
问题是蜘蛛不仅会爬到我想要的网站,例如 https://www.erowid.org/experiences/subs/exp_aPVP.shtml (它提供了我需要的所有描述) 但也会爬入该站点的子部分,例如https://www.erowid.org/experiences/subs/exp_aPVP_General.shtml,这是我需要的代码的一个子部分。
我正在尝试编辑我的代码,以便它拒绝任何带有下划线的内容,我认为 \w+ 会这样做但没有。我尝试使用 [a-z]+ ,但蜘蛛都停止了。
为了获得所有所需的网站,正确的正则表达式是什么,那些在 www.erowid.org/experiences/sub/exp_(drugname 形式的药物名称后没有下划线的网站).shtml
【问题讨论】: