【问题标题】:Can't scrape the links to next pages when using xPath selectors, returns empty. (Using Scrapy)使用 xPath 选择器时无法抓取到下一页的链接,返回空。 (使用 Scrapy)
【发布时间】:2018-02-24 21:14:49
【问题描述】:

我正在使用 Scrapy 并尝试抓取 this 网址,当我请求页面上有关产品的任何数据时,我将其取出。但是带有分页器类和 id=paginator1 的 div 被返回为空,即使它是一个包含对下一页的引用的表。我尝试将 xPath 选择器用于表和 css 选择器,但都返回空。 这是我尝试过的,使用 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]: []

【问题讨论】:

    标签: python web-scraping scrapy


    【解决方案1】:

    分页是使用 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>
    

    您可以从&lt;script&gt; 块中提取所有相关信息:

    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 的样子)。

    【讨论】:

      【解决方案2】:

      如果您查看实际的 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(例如无头浏览器)

      【讨论】:

        猜你喜欢
        • 2016-12-02
        • 1970-01-01
        • 2021-12-03
        • 1970-01-01
        • 1970-01-01
        • 2020-11-26
        • 1970-01-01
        • 2019-03-23
        • 2023-03-13
        相关资源
        最近更新 更多