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

Posted

技术标签:

【中文标题】使用python抓取AJAX电子商务网站【英文标题】:Scraping AJAX e-commerce site using python 【发布时间】:2019-06-21 10:23:49 【问题描述】:

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

请参考图片:

1 Chrome F12 :

2 结果 :

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

问题:

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

    谁能帮助我了解通过抓取 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)

【问题讨论】:

【参考方案1】:

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

在这种情况下请求goes to this 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')

【讨论】:

谢谢先生。很抱歉,如何获取请求发送的 API url?具体来说,我在哪里可以获得该特定页面中的 API 调用?是通过在 chrome 上使用“检查元素”吗? @FirdhausSaleh 在 chrome 中,您可以打开开发人员工具,然后转到 Network 选项卡并选择 XHR 以仅显示 xhr 请求。您还可以在网络选项卡中单击请求并检查响应。 在我忘记之前,谢谢先生。我解决了。是的,这是关于标题的事情。再次,非常感谢您【参考方案2】:

欢迎来到 ***! :)

您也可以查看Selenium

查看文档中的示例用法:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox()
driver.get("http://www.python.org")
assert "Python" in driver.title
elem = driver.find_element_by_name("q")
elem.clear()
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
assert "No results found." not in driver.page_source
driver.close()

当您使用 requests(或 Scrapy 之类的库)时,通常不会加载 javascript。正如@dmitrybelyakov 提到的,您可以使用 Selenium 回复这些呼叫或模仿正常的用户交互。

【讨论】:

会建议,去这个。

以上是关于使用python抓取AJAX电子商务网站的主要内容,如果未能解决你的问题,请参考以下文章

Selenium 无法使用 python 抓取 Shopee 电子商务网站

使用scrapy抓取电子商务

从网站抓取电子邮件

抓取受保护的电子邮件

如何使用 Python 抓取需要先登录的网站

抓取电子邮件地址时无法删除不需要的东西