Python Scrapy Xpath获得正确的分页
首先,如果你正在读这篇文章,谢谢你 我已经花了一段时间收集次要数据,但是我想输入一些额外的信息,但是我被分页卡住了 我想获得链接的数据href,但是它需要包含 我一直在使用[contains()]但是,当我需要包含具有特定类的对象时,如何获取数据hrefPython Scrapy Xpath获得正确的分页,python,xpath,scrapy,Python,Xpath,Scrapy,首先,如果你正在读这篇文章,谢谢你 我已经花了一段时间收集次要数据,但是我想输入一些额外的信息,但是我被分页卡住了 我想获得链接的数据href,但是它需要包含 我一直在使用[contains()]但是,当我需要包含具有特定类的对象时,如何获取数据href <li><a class="cursor" data-type="js" data-href="test"><i class="fa fa-chevron-right" aria-hidden="true">
<li><a class="cursor" data-type="js" data-href="test"><i class="fa fa-chevron-right" aria-hidden="true"></i></a></li>
这对正确的数据无效
非常感谢你的帮助
完整源代码:
<div class="pagination-container margin-bottom-20"> <div class="text-center"><ul class="pagination"><li><a class="cursor" data-type="js" data-href="/used-truck/1-32/truck-ads.html"><i class="fa fa-chevron-left" aria-hidden="true"></i></a></li><li><a href="/used-truck/1-32/truck-ads.html">1</a></li><li class="active"><a>2</a></li><li><a href="/used-truck/1-32/truck-ads.html?p=3">3</a></li><li class="hidden-xs no-link"><a>...</a></li><li class="hidden-xs"><a href="/used-truck/1-32/truck-ads.html?p=12">12</a></li><li class="hidden-xs no-link"><a>...</a></li><li class="hidden-xs"><a href="/used-truck/1-32/truck-ads.html?p=22">22</a></li><li><a class="cursor" data-type="js" data-href="/used-truck/1-32/truck-ads.html?p=3"><i class="fa fa-chevron-right" aria-hidden="true"></i></a></li></ul></div> </div> </div>
试试看:
next_page_url = response.selector.xpath('//*[@class="text-center"]/ul/li/a[@class="cursor")]/@data-href').extract_first()
我建议您首先确保您的元素存在于初始html中: 只需在Chrome中使用
Ctlr+U
,然后使用Ctrl+F
查找元素
如果可以在那里找到元素,则xpath选择器有问题。
Else元素是由javascript生成的,您必须使用另一种方法来获取数据
另外,您不应该使用ChromeDevTools的“元素”选项卡来检查元素是否存在,因为该选项卡包含已应用JS代码的元素。所以只检查源代码(
ctrl+U
)嗯。。。原来是这样一个简单的例子(:
您的错误是。先提取\u()
,然后提取最后一项以获得下一页
next_page = response.xpath('//a[@class="cursor"]/@data-href').extract()[-1]
这就可以了。但我建议您从分页列表中提取所有链接,因为scrapy正在管理重复爬网。这将做得更好,并且出错的机会更少:
pages = response.xpath('//ul[@class="pagination"]//a/@href').extract()
for url in pages:
yield scrapy.Request(url=response.urljoin(url), callback=self.whatever)
等等..可能的原因是源HTML中没有这样的HTML代码。我建议您检查一下(通常是
Ctrl+U
)您好:)首先感谢您阅读我的问题,这只适用于第一页,第二页将有与它首先拾取的完全相同的对象。您好,感谢您阅读我的帖子,我只使用源代码(ctrl+u)谢谢!您好!不客气!您可以共享url以便我们可以查看源html吗?您好,我在一个顶部添加了它:)您好,Michael,第一行工作非常感谢您的帮助!,。。。我刚刚开始使用scrapy(我已经有一段时间没有使用python了),它是一个非常有用的工具:)祝你有一个很棒的一天!gr Bas
pages = response.xpath('//ul[@class="pagination"]//a/@href').extract()
for url in pages:
yield scrapy.Request(url=response.urljoin(url), callback=self.whatever)