首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用xPath选择器时不能刮到下一个页面的链接,返回空。(使用Scrapy)

使用xPath选择器时不能刮到下一个页面的链接,返回空。(使用Scrapy)
EN

Stack Overflow用户
提问于 2018-02-24 21:14:49
回答 2查看 74关注 0票数 0

我正在使用Scrapy并试图刮掉 url,当我请求页面上任何有关产品的数据时,我就会把它拿出来。但是带有分页器类和id=paginator1的div作为空返回,即使它是一个具有对下一页的引用的表。我尝试过对表和css选择器使用xPath选择器,但两者都返回为空。这就是我尝试过的,使用css

In [29]: response.css('span a::attr(href)').extract() Out[29]: ['/registration/formregistration/new', '/', '/catalog/solntsezaschitnye_ochki', 'http://wezom.com.ua/prodvizhenie']

In [31]: response.xpath('//*[@id="paginator1"]/table/tbody/tr[1]/td[2]/span') Out[31]: []

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-24 21:35:32

分页是使用JavaScript生成的,您可以在HTML中看到:

代码语言:javascript
运行
复制
<div class="paginator" id="paginator1"></div>
<div class="paginator_pages">Страниц: 14</div>
<script type="text/javascript">
/*pag1 = new Paginator("id div", vsego stranic, kol-vo na stranice, tekuchay stranica, "url");*/
pag1 = new Paginator("paginator1", 14, 10, 1, "/catalog/s_o_u_l_/page/", "/catalog/s_o_u_l_");
</script>

您可以从<script>块中提取所有相关信息:

代码语言:javascript
运行
复制
import ast

script = response.xpath('//script[contains(text(), "paginator1")]/text()').extract()[0].strip()
paginator = script.splitlines()[1].strip().split('new Paginator')[1].rstrip(';')

paginatorHolderId, pagesTotal, pagesSpan, pageCurrent, baseUrl = ast.literal_eval(paginator)

然后,您可以根据分页脚本中的逻辑构建分页URL(或者只查看URL的样子)。

票数 1
EN

Stack Overflow用户

发布于 2018-02-24 21:35:20

如果您查看实际的html源代码(response.text),您将看到以下内容:

代码语言:javascript
运行
复制
<div class="paginator" id="paginator1"></div>
<div class="paginator_pages">Страниц: 14</div>
<script type="text/javascript">
/*pag1 = new Paginator("id div", vsego stranic, kol-vo na stranice, tekuchay stranica, "url");*/
pag1 = new Paginator("paginator1", 14, 10, 1, "/catalog/s_o_u_l_/page/", "/catalog/s_o_u_l_");
</script>

如您所见,div确实是空的,并且是通过javascript填充的。

您有两个选项可以获得这些链接:

  1. 自己生成它们(应该相当容易)
  2. 使用一些东西为您运行javascript (例如,无头浏览器)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48967679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档