首先,如果您正在阅读本文,则谢谢您。
我已经抽空收集了一些次要数据,但是我想获取一些其他信息,但是我被分页了。
我想获取链接的data-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>
我一直在使用以下内容:
next_page_url = response.selector.xpath('//*[@class="text-center"]/ul/li/a[contains(@class,"cursor")]/@data-href').extract_first()
有效但不适用于正确的数据参考
非常感谢您的帮助
完整源代码:
<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>
答案 0 :(得分:1)
呵呵...原来是这么简单的情况(:
您的错误是this.props.state.param1
,因此您应提取最后一个项目以获取下一页。
.extract_first()
这可以解决问题。但我建议您从分页列表中提取所有链接,因为scrapy正在管理重复爬网。这样会做得更好,并且出错的机会更少:
next_page = response.xpath('//a[@class="cursor"]/@data-href').extract()[-1]
以此类推。
答案 1 :(得分:0)
尝试一下:
next_page_url = response.selector.xpath('//*[@class="text-center"]/ul/li/a[@class="cursor")]/@data-href').extract_first()
答案 2 :(得分:0)
我建议您先确保您的元素存在于初始html中:
在Chrome中仅Ctlr+U
,然后在Ctrl+F
中查找元素。
如果可以在此处找到元素-您的xpath选择器出了点问题。 其他元素是由javascript生成的,您必须使用另一种方式来获取数据。
PS。您不应使用Chrome Devtools的“元素”标签来检查元素是否存在,因为该标签包含已应用JS代码的元素。因此,仅检查源文件(ctrl+U
)