请查看Scrapy文档中的this spider example。解释是:
我完全复制了同一蜘蛛,并用另一个初始URL替换了“example.com”。
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from scrapy.item import Item
from stb.items import StbItem
class StbSpider(CrawlSpider):
domain_name = "stb"
start_urls = ['http://www.stblaw.com/bios/MAlpuche.htm']
rules = (Rule(SgmlLinkExtractor(allow=(r'/bios/.\w+\.htm', )), callback='parse', follow=True), )
def parse(self, response):
hxs = HtmlXPathSelector(response)
item = StbItem()
item['JD'] = hxs.select('//td[@class="bodycopysmall"]').re('\d\d\d\d\sJ.D.')
return item
SPIDER = StbSpider()
但是我的蜘蛛“stb”没有像预期的那样从“/bios/”收集链接。它运行初始URL,抓取
item['JD']
并将其写入文件,然后退出。为什么
SgmlLinkExtractor
被忽略?之所以读取Rule
,是因为它在Rule
行内捕获了语法错误。这是一个错误吗?我的代码有什么问题吗?除了我在每次运行中看到的一堆未处理的错误外,没有任何错误。
很高兴知道我在这里做错了什么。感谢您提供任何线索。我是否误解了
SgmlLinkExtractor
应该做什么? 最佳答案
parse
函数实际上是在CrawlSpider类中实现并使用的,您无意中将其覆盖。如果将名称更改为其他名称(例如parse_item
),则该规则应起作用。
关于python - Scrapy SgmlLinkExtractor忽略了允许的链接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1811132/