以前,我发布了一个有关如何从AJAX网站获取数据的问题,该数据来自以下链接:Scraping AJAX e-commerce site using python
我对如何获得使用Network标签中的chrome F12的响应以及使用python进行一些编码以显示数据的方式有所了解。但是我几乎找不到它的特定API网址。 JSON数据并非来自先前网站的URL,而是来自Chrome F12中的Inspect元素。
我真正的问题实际上是如何使用BeautifulSoup或与其相关的任何东西仅获取JSON数据?在只能从application / id + json获得JSON数据之后,我将其转换为python可以识别的JSON数据,以便可以将产品显示为表格形式。
另一个问题是我运行代码几次后,缺少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)
答案 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/