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

qlckcl4x  于 2022-11-09  发布在  其他
关注(0)|答案(4)|浏览(200)

所以我用scrapy从Amazon books部分抓取数据。但不知怎么的,我知道它有一些动态数据。我想知道如何从网站中提取动态数据。以下是我目前尝试的方法:

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.那么,我如何刮一个网站,其中有动态内容?
1.动态内容和静态内容之间的区别到底是什么?
1.如何从网站中提取价格和图片等其他信息?如何获得特定的类,例如价格?
1.我怎么知道数据是动态创建的呢?

tag5nh1u

tag5nh1u1#

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

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

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

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

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

请参考您的第一个问题

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

如果您在dev工具页面源代码中看到它,而不是在您第一次请求的html页面源代码中看到它,您就知道它是动态创建的。

最后一句

Amazon确实提供了一个API来访问数据。

2lpgd968

2lpgd9682#

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

为了从网站中抓取动态内容,我们需要让网页完全加载,这样数据才能注入到页面中。

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

静态网站中的内容是固定内容,不会在服务器上行程,而是使用预先建置的原始程式码档案直接传回。动态网站会在执行阶段于服务器端行程内容,以载入内容。每次载入页面或更新数据时,这些网站的数据可能会不同。

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

你可以打开开发工具,然后打开网络标签。在那里,一旦你刷新页面,你可以查看XHR请求或对API的请求。如果存在类似的请求,那么这个站点是动态的,否则它是静态的。

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

要从网站中提取动态内容,我们可以使用Selenium(python -最佳选项之一):

  • Selenium -一个自动化的浏览器模拟框架你可以加载页面,并使用CSS选择器来匹配页面上的数据。下面是一个如何使用它的例子。
import time
from selenium import webdriver

driver = webdriver.Chrome()

driver.get("https://www.amazon.in/s?k=agatha+christie+books&crid=3MWRDVZPSKVG0&sprefix=agatha%2Caps%2C269&ref=nb_sb_ss_i_1_6")
time.sleep(4)
titles = driver.find_elements_by_css_selector(
    ".a-size-medium.a-color-base.a-text-normal")

print(titles[0].text)

如果您不想使用Python,还有其他开源选项,如PuppeteerPlaywright,以及完整的抓取平台,如Bright Data,它们具有自动提取动态内容的内置功能。

kgqe7b3p

kgqe7b3p3#

如果你想加载动态内容,你需要模拟一个web浏览器。当你发出一个HTTP请求时,你只会得到请求返回的文本,没有其他内容。要模拟一个web浏览器,并与浏览器上的数据交互,请使用selenium包for Python:
https://selenium-python.readthedocs.io/

km0tfn4u

km0tfn4u4#

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

有动态内容的网站有自己的API来提取数据。这些数据甚至不是固定的,如果你过一段时间再检查它,情况就会不同。但是,这并不意味着你不能刮出一个动态网站。你可以使用Selenium或Puppeteer这样的自动化测试框架。

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

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

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

为此,你可以使用像Python中的BeautifulSoup和Nodejs中的Cheerio这样的库。它们的文档非常容易理解,我强烈建议你通读它们。你也可以遵循这个tutorial

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

在重新加载页面时,打开chrome开发工具中的网络选项卡,你会看到很多API在后面工作,根据你要访问的页面提供相关数据。在这种情况下,网站是动态的。

相关问题