Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Scrapy Xpath获得正确的分页_Python_Xpath_Scrapy - Fatal编程技术网

Python Scrapy Xpath获得正确的分页

Python 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">

首先,如果你正在读这篇文章,谢谢你

我已经花了一段时间收集次要数据,但是我想输入一些额外的信息,但是我被分页卡住了

我想获得链接的数据href,但是它需要包含

我一直在使用[contains()]但是,当我需要包含具有特定类的对象时,如何获取数据href

<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)