使用Python抓取来自电子商务Ajax站点的JSON数据

时间:2019-02-20 08:36:47

标签: python json ajax beautifulsoup response

以前,我发布了一个有关如何从AJAX网站获取数据的问题,该数据来自以下链接:Scraping AJAX e-commerce site using python

我对如何获得使用Network标签中的chrome F12的响应以及使用python进行一些编码以显示数据的方式有所了解。但是我几乎找不到它的特定API网址。 JSON数据并非来自先前网站的URL,而是来自Chrome F12中的Inspect元素。

enter image description here enter image description here


  1. 我真正的问题实际上是如何使用BeautifulSoup或与其相关的任何东西仅获取JSON数据?在只能从application / id + json获得JSON数据之后,我将其转换为python可以识别的JSON数据,以便可以将产品显示为表格形式。

  2. 另一个问题是我运行代码几次后,缺少JSON数据。我认为该网站将阻止我的IP地址。我该如何解决这个问题?


这是网站链接:

https://www.lazada.com.my/catalog/?_keyori=ss&from=input&page=1&q=h370m&sort=priceasc

这是我的代码

  

从bs4导入BeautifulSoup导入请求

     

page_link =   'https://www.lazada.com.my/catalog/?_keyori=ss&from=input&page=1&q=h370m&sort=priceasc'

     

page_response = requests.get(page_link,timeout = 5)

     

page_content = BeautifulSoup(page_response.content,“ html.parser”)

     

print(page_content)

3 个答案:

答案 0 :(得分:1)

您可以只使用find方法,将指向<script>标签的指针与attr type=application/json

然后,您可以使用json包将值加载到字典中

这是一个代码示例:

from bs4 import BeautifulSoup as soup
import requests
import json

page_link = 'https://www.lazada.com.my/catalog/?_keyori=ss&from=input&page=1&q=h370m&sort=priceasc'
page_response = requests.get(page_link, timeout=5)
page_content = soup(page_response.text, "html.parser")

json_tag = page_content.find('script',{'type':'application/json'})
json_text = json_tag.get_text()
json_dict = json.loads(json_text)
print(json_dict)

编辑:很抱歉,我没有看到您搜索type=application/ld+json attr 由于此属性似乎有多个<script>,因此您可以简单地使用find_all方法:

from bs4 import BeautifulSoup as soup
import requests
import json

page_link = 'https://www.lazada.com.my/catalog/?_keyori=ss&from=input&page=1&q=h370m&sort=priceasc'
page_response = requests.get(page_link, timeout=5)
page_content = soup(page_response.text, "html.parser")

json_tags = page_content.find_all('script',{'type':'application/ld+json'})
for jtag in json_tags:
    json_text = jtag.get_text()
    json_dict = json.loads(json_text)
    print(json_dict)

答案 1 :(得分:0)

为什么不使用这个 导入请求

响应= request.get(...) 数据= response.json()

答案 2 :(得分:0)

您将不得不从Soup手动解析HTML数据,因为其他网站将限制其json API不受其他方的攻击。<​​/ p>

您可以在文档中找到更多详细信息: https://www.crummy.com/software/BeautifulSoup/bs4/doc/