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

时间:2019-04-16 13:33:18

标签: 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+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来选择一个我必须抓取的类,但是在动态网站的情况下,它是行不通的。

  1. 那我该如何抓取一个包含动态内容的网站?
  2. 动态内容和静态内容之间到底有什么区别?
  3. 如何从网站上提取价格和图像等其他信息?以及如何获取价格等特定类?
  4. 我怎么知道数据是动态创建的?

4 个答案:

答案 0 :(得分:2)

那我该如何抓取具有动态内容的网站?

有一些选择:

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

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

动态的是指在初始页面请求之后根据请求生成数据。静态表示该站点的原始调用中所有数据都存在

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

请参阅第一个问题

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

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

最后

Amazon确实提供了用于访问数据的API。尝试研究一下

答案 1 :(得分:0)

如果要加载动态内容,则需要模拟Web浏览器。发出HTTP请求时,将仅获得该请求返回的文本,仅此而已。要模拟Web浏览器并与浏览器上的数据进行交互,请使用适用于Python的硒包:

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

答案 2 :(得分:0)

要抓取动态内容(如JScript),可以使用Srapy Splash。看一下:https://www.google.com/amp/s/blog.scrapinghub.com/2015/03/02/handling-javascript-in-scrapy-with-splash%3fhs_amp=true

答案 3 :(得分:0)

那我该如何抓取具有动态内容的网站?

具有动态内容的网站从其提取数据的地方拥有自己的API。该数据甚至不是固定的,如果您将在一段时间后进行检查,则将有所不同。但是,这并不意味着您无法抓取动态网站。您可以使用自动测试框架,如Selenium或Puppeteer。

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

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

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

为此,您可以使用python中的BeautifulSoup和Nodejs中的cheerio之类的库。他们的文档很容易理解,我强烈建议您仔细阅读它们。 您也可以遵循此tutorial

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

重新加载页面时,请在chrome开发工具中打开“网络”标签。您将看到很多API都在努力根据您要访问的页面提供相关数据。在这种情况下,网站是动态的。