使用python抓取AJAX电子商务网站

Fir*_*leh 2 python ajax screen-scraping beautifulsoup web

我在使用BeautifulSoup 抓取电子商务网站时遇到问题。我做了一些谷歌搜索,但仍然无法解决问题。

请参考图片:

1个 Chrome F12在此处输入图片说明

2 结果在此处输入图片说明

这是我尝试抓取的网站:“ https://shopee.com.my/search?keyword=h370m

问题:

  1. 当我尝试在Google Chrome(F12)上打开Inspect Element时,可以看到产品名称,价格等信息。但是,当我运行python程序时,在python结果中无法获得相同的代码和标记。经过一番谷歌搜索后,我发现该网站使用AJAX查询来获取数据

  2. 任何人都可以通过抓取AJAX网站来帮助我找到获取这些产品数据的最佳方法吗?我想以表格形式显示数据

我的代码:

import requests
from bs4 import BeautifulSoup
source = requests.get('https://shopee.com.my/search?keyword=h370m')
soup = BeautifulSoup(source.text, 'html.parser')
print(soup)
Run Code Online (Sandbox Code Playgroud)

dmi*_*kov 5

欢迎来到StackOverflow!您可以检查将ajax请求发送到的位置并进行复制。

在这种情况下,请求将转到此api url。然后,您可以requests用来执行类似的请求。但是请注意,此api端点需要正确的UserAgent标头。您可以使用诸如fake-useragent之类的包,也可以仅对代理字符串进行硬编码。

import requests

# fake useragent
from fake_useragent import UserAgent
user_agent = UserAgent().chrome

# or hardcode
user_agent = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1468.0 Safari/537.36'

url = 'https://shopee.com.my/api/v2/search_items/?by=relevancy&keyword=h370m&limit=50&newest=0&order=desc&page_type=search'
resp = requests.get(url, headers={
    'User-Agent': user_agent
})
data = resp.json()
products = data.get('items')
Run Code Online (Sandbox Code Playgroud)

  • 在我忘记之前,谢谢你,先生。我解决了。是的,这是关于标题的事情。再次非常感谢 (2认同)