我想刮一些开始的网址,然后按照规则在那些网页的链接。我的蜘蛛是从CrawlSpider
继承的,并且设置了start_urls
和“rules”。但它似乎没有使用我定义的解析函数来解析start_url。代码如下:
<!-- language: lang-python -->
class ZhihuSpider(CrawlSpider):
start_urls = ["https://www.zhihu.com/topic/19778317/organize/entire",
"https://www.zhihu.com/topic/19778287/organize/entire"]
rules = (Rule(LinkExtractor(allow= (r'topic/\d+/organize/entire')), \
process_request='request_tagInfoPage', callback = 'parse_tagPage'))
# this is the parse_tagPage() scrapy should use to scrape
def parse_tagPage():
print("start scraping!") # Explicitly print to show that scraping starts
# do_something
然而,控制台显示,scrapy爬网的起始网址,但没有打印。所以我很确定parse_tagPage()函数没有被调用。尽管如此,scrapy显示url是被爬网的[scrapy] DEBUG: Crawled (200) <GET https://www.zhihu.com/topic/19778317/organize/entire> (referer: http://www.zhihu.com)
关于为什么会发生这种情况以及如何将scray设置为使用parse_tagPage()有什么提示吗?在
首先,CrawlSpider类使用一个默认的parse()方法来处理所有没有指定回调函数的请求,在我的例子中包括从start_url发出的请求。这个parse()方法只应用规则来提取链接,根本不解析start\u url的页面。这就是为什么我不能从起始网址页面抓取任何东西。在
第二,LinkExtractor不知何故只从起始url页面提取第一个链接。不幸的是,第一个链接是起始网址本身。因此,糟糕的内部复制防止机制阻止了对这些页面的解析。这就是调用回调函数parse_tagPage()的原因。在
我正在修理LinkExtractor。在
相关问题 更多 >
编程相关推荐