python - 如何从网站上抓取动态内容?

标签 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)

现在我正在使用 SelectorGadget 来选择一个我必须抓取的类,但在动态网站的情况下,它不起作用。
  • 那么如何抓取具有动态内容的网站呢?
  • 动态内容和静态内容到底有什么区别?
  • 如何从网站中提取价格和图片等其他信息?以及如何获得特定的类,例如价格?
  • 我怎么知道数据是动态创建的?
  • 最佳答案

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

    有几个选项:

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

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

    动态意味着数据是从初始页面请求后的请求中生成的。静态意味着所有数据都在对站点的原始调用中

    如何从网站中提取价格和图片等其他信息?以及如何获得特定的类(class),例如价格?

    引用你的第一个问题

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

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

    最后

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

    关于python - 如何从网站上抓取动态内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55709463/

    相关文章:

    python - 尝试在每个数据帧列条目中搜索与 'Id' 对应的值时出现内存错误

    python - 为什么Python3解释器仅在通过fcron执行时才会引发UnicodeEncodeError?

    php - 创建动态 js 文件并缓存它?

    python - Scrapy 蜘蛛内存泄漏

    python - Pandas groupby,其中所有列都添加到以列名为前缀的列表中

    Python导入: Module's path is different,取决于它是从哪里导入的?

    具有多个 ServerAlias 的 Apache2 动态虚拟主机

    javascript - 如何向在 jquery 中动态创建的元素添加操作?

    python - SCRAPY:每次我的蜘蛛爬行时,它都会抓取同一页面(第一页)

    Scrapy FormRequest 返回 400 错误代码