scrapy不返回文本
我刚开始学习scrapy,想要抓取网页。在正式开始一个完整的项目之前,我先在命令行上做了一些探索。
通过网页抓取,我用下面的命令提取了H3标签下的链接:
sel.xpath("//h3//@href").extract()
这个命令提取了所有的链接。但是后来我发现,网站的链接是分页的。我是通过手动翻页来知道总共有多少页的。不过我想从第一页提取信息,因为第一页底部有一些信息:
Page 1 of 100
在一个div标签下。
<div class="pagination-meta">
Page 1 of 100
</div>
我尝试用以下命令来提取这些信息,但结果只返回了一个空列表[]。如果我哪里错了,请指正我。
sel.xpath('//div[@class="pagination_meta"]/text()').extract();
因为pagination-meta这个div在另外两个div里面,所以我尝试了下面的命令:
<div class="search-pagination-top bb box-sizing-content">
<div class="grid_3 column alpha tmargin">
<div class="pagination-meta">
Page 1 of 100
</div>
</div>
</div>
sel.xpath('//div[@class="search-pagination-top bb box-sizing-content"]//div/text()').extract();
[u'Page 1 of 100']
这样做对吗?为什么我第一个命令没有返回准确的内容呢?
1 个回答
1
如果你使用以下代码,它就能正常工作:
sel.xpath('//div[@class="pagination-meta"]/text()').extract();
因为你是在匹配完全相同的字符串,所以下划线和连字符确实会有区别。
达到同样的结果有很多种方法。你用的第二种方法也是正确的。很多时候,我们需要在一个或多个位置步骤中获取上下文,这样才能使用相对XPath表达式来导航到最终的选择步骤。这种情况通常发生在页面可能会变化,或者结构可能会变化的时候。