我正在尝试让 Scrapy Crawlspider 的“规则”部分正常工作。
我找到了返回我想要关注的链接的
xpath
。是
//*[@class="course_detail"]//td[4]/a/@href
它总共返回大约 2700 个 URL。
基本上,我试图告诉蜘蛛遵循与该匹配的所有内容
xpath
,但我无法让以下代码正常工作:
rules = (
Rule(SgmlLinkExtractor( allow=[r'.*'],
restrict_xpaths='//*[@class="course_detail"]//td[4]/a/@href'
),
callback='parse_item'
),
)
我没有收到任何错误,但蜘蛛似乎没有越过我在
start_urls
中定义的页面。
编辑:弄清楚了!只需删除@href。海登的代码也有帮助,所以我将答案奖励给他。
我认为
allow
和 restrict_xpaths
在传递给 SgmlLinkExtractor 时应该是相同的类型(即两个列表或两个字符串)。大多数示例使用 tuples
:
rules = (
Rule(SgmlLinkExtractor( allow = (r'.*',),
restrict_xpaths = ('//*[@class="course_detail"]//td[4]/a/@href',)
),
callback='parse_item'
),
)
顺便说一句,我喜欢使用埃及括号来尝试跟踪我的论点。