【发布时间】:2009-11-28 00:34:23
【问题描述】:
请查看 Scrapy 文档中的 this spider example。解释是:
这个蜘蛛会开始爬取 example.com 的主页,收集类别链接和项目链接,并使用 parse_item 方法解析后者。对于每个项目响应,将使用 XPath 从 HTML 中提取一些数据,并用它填充一个项目。
我完全复制了同一个蜘蛛,并将“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 应该做什么?
【问题讨论】:
-
当我看到“除了每次运行都会看到一堆未处理的错误之外没有任何错误”时,我不得不挠头。
-
抱歉,我看到了弃用警告。我看到的错误是由于 Pablo Hoffman 在stackoverflow.com/questions/1767553/… 提到的同时打开了 telnet 和 shell,当我关闭 shell 时,我再也看不到它们了。任何线索为什么允许的链接没有被抓取?
标签: python web-crawler scrapy