Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从网站中抓取动态内容?_Python_Dynamic_Scrapy - Fatal编程技术网

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

Python 如何从网站中抓取动态内容?,python,dynamic,scrapy,Python,Dynamic,Scrapy,因此,我使用scrapy从Amazon图书部分获取数据。但不知怎的,我知道它有一些动态数据。我想知道如何从网站中提取动态数据。到目前为止,我已经尝试了以下几点: import scrapy from ..items import AmazonsItem class AmazonSpiderSpider(scrapy.Spider): name = 'amazon_spider' start_urls = ['https://www.amazon.in/s?k=agatha+ch

因此,我使用scrapy从Amazon图书部分获取数据。但不知怎的,我知道它有一些动态数据。我想知道如何从网站中提取动态数据。到目前为止,我已经尝试了以下几点:

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选择一个类,我必须对其进行刮取,但在动态网站的情况下,它不起作用

  • 那么,我该如何抓取一个有动态内容的网站呢
  • 动态内容和静态内容之间到底有什么区别
  • 如何从网站中提取其他信息,如价格和图像?如何获得特定的类,例如价格
  • 我如何知道数据是动态创建的

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


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

    有几种选择:

  • 使用Selenium,它允许您模拟打开浏览器,让页面呈现,然后提取html源代码
  • 有时,您可以查看XHR,看看是否可以直接获取数据(比如从API获取数据)
  • 有时数据在html源的
    标记中。一旦将文本转换为json格式,您可以搜索这些内容并使用
    json.loads()
  • 动态内容和静态内容的区别是什么?

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

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

    参考你的第一个问题

    我如何知道数据是动态创建的?

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

    最后


    Amazon确实提供了访问数据的API。试着研究一下这一点

    对于抓取动态内容(如JScript),您可以使用Srapy Splash。看看这个:

    那么,我该如何抓取一个具有动态内容的网站呢?

    具有动态内容的网站有自己的API,从中提取数据。这些数据甚至不是固定的,如果你在一段时间后检查它,就会有所不同。但是,这并不意味着你不能刮一个动态网站。您可以使用自动化测试框架,如Selenium或Puppeter

    动态内容和静态内容的区别是什么?

    正如我在第一个问题中所解释的,静态数据是固定的,并且将永远保持不变,但动态数据将定期更新或异步更改

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

    为此,您可以使用python中的BeautifulSoup和Nodejs中的cheerio等库。他们的文档很容易理解,我强烈建议你仔细阅读。 你也可以这样做

    我如何知道数据是动态创建的?


    重新加载页面时,在chrome开发工具中打开网络选项卡。您将看到许多API正在根据您试图访问的页面提供相关数据。在这种情况下,网站是动态的。

    动态数据被注入到页面中,您需要像Selenium这样的东西等待整个页面加载,然后应用XPath。或者,您可以“模拟”页面加载,自己请求获取数据,解析数据并将其放在一起。关于第三个问题,我要问的是,由于我使用的类在这种情况下不起作用,如何获取此类。您是指html标记中的class属性吗?css('.s-access-title::attr(“数据属性”))。此