scrapy不返回文本

0 投票
1 回答
638 浏览
提问于 2025-04-18 09:50

我刚开始学习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表达式来导航到最终的选择步骤。这种情况通常发生在页面可能会变化,或者结构可能会变化的时候。

撰写回答