因此,我正在使用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来选择一个我必须抓取的类,但是在动态网站的情况下,它是行不通的。
答案 0 :(得分:2)
那我该如何抓取具有动态内容的网站?
有一些选择:
<script>
标记内。将文本处理为json格式后,您可以搜索这些内容并使用json.loads()
动态内容和静态内容之间到底有什么区别?
动态的是指在初始页面请求之后根据请求生成数据。静态表示该站点的原始调用中所有数据都存在
如何从网站中提取其他信息,例如价格和图片?以及如何获取价格等特定类?
请参阅第一个问题
我怎么知道数据是动态创建的?
如果您在开发工具页面的源代码中看到它是动态创建的,而在您第一次请求的html页面的源代码中却没有看到它,那么您就会知道它是动态创建的。您还可以查看数据是否由开发工具中的其他请求生成,并查看网络-> XHR
最后
Amazon确实提供了用于访问数据的API。尝试研究一下
答案 1 :(得分:0)
如果要加载动态内容,则需要模拟Web浏览器。发出HTTP请求时,将仅获得该请求返回的文本,仅此而已。要模拟Web浏览器并与浏览器上的数据进行交互,请使用适用于Python的硒包:
答案 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都在努力根据您要访问的页面提供相关数据。在这种情况下,网站是动态的。