使用xPath选择器时无法刮取指向下一页的链接,返回空。(使用胶状物)

2024-09-28 20:48:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Scrapy并尝试刮取thisurl,当我请求页面上产品的任何数据时,我会将其取出。但是具有paginator类且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]: []


Tags: 数据inid产品response选择器页面out
2条回答

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

<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>块中提取所有相关信息:

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)

然后可以根据the pagination script中的逻辑构建分页url(或者只查看url的样子)。你知道吗

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

<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(例如无头浏览器)

相关问题 更多 >