如何从网站中抓取动态内容?

Sri*_*ngh 5 python dynamic scrapy

所以我使用 scrapy 从亚马逊图书部分抓取数据。但不知何故我知道它有一些动态数据。我想知道如何从网站中提取动态数据。到目前为止我已经尝试过以下方法:

import scrapy
from ..items import AmazonsItem

class AmazonSpiderSpider(scrapy.Spider):
    name = 'amazon_spider'
    start_urls = ['https://www.amazon.in/s?k=agatha+christie+books&crid=3MWRDVZPSKVG0&sprefix=agatha%2Caps%2C269&ref=nb_sb_ss_i_1_6']

    def parse(self, response):
        items =  AmazonsItem()
        products_name = response.css('.s-access-title::attr("data-attribute")').extract()
        for product_name in products_name:
            print(product_name)
        next_page = response.css('li.a-last a::attr(href)').get()
            if next_page is not None:
                next_page = response.urljoin(next_page)
                yield scrapy.Request(next_page, callback=self.parse)
Run Code Online (Sandbox Code Playgroud)

现在我使用 SelectorGadget 来选择一个我必须抓取的类,但对于动态网站,它不起作用。

  1. 那么如何抓取具有动态内容的网站呢?
  2. 动态内容和静态内容到底有什么区别?
  3. 如何从网站中提取价格和图像等其他信息?以及如何获得特定的课程,例如价格?
  4. 我怎么知道数据是动态创建的?

chi*_*n88 8

那么如何抓取具有动态内容的网站呢?

有以下几种选择:

  1. 使用Selenium,它允许您模拟打开浏览器,让页面呈现,然后拉取html源代码
  2. 有时您可以查看 XHR 并查看是否可以直接获取数据(例如从 API)
  3. 有时数据位于<script>html 源的标签内。您可以搜索这些内容并json.loads()在将文本处理为 json 格式后使用

动态内容和静态内容到底有什么区别?

动态意味着数据是根据初始页面请求之后的请求生成的。静态意味着所有数据都在最初调用站点时存在

如何从网站中提取价格和图像等其他信息?以及如何获得特定的课程,例如价格?

参考你的第一个问题

我怎么知道数据是动态创建的?

如果您在开发工具页面源中看到它,而不是在您第一次请求的 html 页面源中看到它,您就会知道它是动态创建的。您还可以查看数据是否是由开发工具中的附加请求生成的,并查看网络 -> XHR

最后

亚马逊确实提供了一个 API 来访问数据。也尝试调查一下


joe*_*dev 0

如果要加载动态内容,则需要模拟网络浏览器。当您发出 HTTP 请求时,您只会获得该请求返回的文本,仅此而已。要模拟 Web 浏览器并与浏览器上的数据交互,请使用 Python 的 selenium 包:

https://selenium-python.readthedocs.io/