【问题标题】:Scrapy: extracting data from script tagScrapy:从脚本标签中提取数据
【发布时间】:2021-01-09 12:30:27
【问题描述】:

我是 Scrapy 的新手。出于工作目的,我正在尝试从“https://www.tysonprop.co.za/agents/”中抓取内容。

特别是,我要查找的信息似乎是由脚本标签生成的。

行: 决议:泰森地产总部 在运行时。

我正在尝试访问在运行时在 h2 元素中生成的文本。

但是,Scrapy 响应对象似乎获取了原始源代码。 IE。我想要的数据显示为 而不是“Tyson Properties Head Office”。

任何帮助将不胜感激。

HTML 响应对象提取:

<script type="text/html" id="id_branch_template">
  <div id="branch-<%= branch.id %>" class="clearfix margin-top30 branch-container" style="display: none;">
    <h2 class="grid_12 branch-name margin-bottom20"><%= branch.branch_name %></h2>
    <div class="branch-agents container_12 first last clearfix">
      <div id="agents-list-left" class="agents-list left grid_6">
      </div>
      <div id="agents-list-right" class="agents-list right grid_6">
      </div>
    </div>
  </div>
</script>
<script type="text/javascript">

当前 Scrapy 蜘蛛代码:

import scrapy
from scrapy.crawler import CrawlerProcess

class TysonSpider(scrapy.Spider):
    name = 'tyson_spider'

    def start_requests(self):
        url = 'https://www.tysonprop.co.za/agents/'
        yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):

        script = response.xpath('//script[@id="id_branch_template"]/text()').get()
        div = scrapy.Selector(text=script).xpath('//div[contains(@class,"branch-container")]')
        h2 = div.xpath('./h2[contains(@class,"branch-name")]')

与这个问题有关: Scrapy xpath not extracting div containing special characters <%=

【问题讨论】:

标签: javascript python scrapy


【解决方案1】:

正如相关问题的公认答案所暗示的,考虑使用 AJAX 端点。

如果这对您不起作用,请考虑使用Splash。 数据似乎是使用 AJAX 下载并使用 JavaScript 添加到页面中的。 Scrapy可以使用Splash在页面上执行JS。

例如,这之后应该可以正常工作。

h2 = div.xpath('./h2[contains(@class,"branch-name")]')

文档中有安装 Splash 的说明,但在启动并运行后,对实际爬虫的代码更改非常少。

安装scrapy-splash

pip install scrapy-splash

在 settings.py 中添加一些配置(在 Github 页面上列出),最后使用 SplashRequest 代替 scrapy.Request。

如果这对您不起作用,请查看SeleniumPyppeteer

此外,在执行 JS(即在脚本中)之前,HTML 响应中没有“Tyson Properties Head Office”,除了作为下拉菜单项,这可能不是那么有用,所以它不可能从响应中提取。

【讨论】:

    猜你喜欢
    • 2020-02-19
    • 2020-06-18
    • 2018-05-23
    • 2018-07-15
    • 2019-01-13
    • 2021-10-10
    • 2020-01-07
    • 2016-11-23
    • 2020-12-07
    相关资源
    最近更新 更多