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

时间:2019-01-28 12:03:21

标签: python ajax web beautifulsoup screen-scraping

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

请参考图片:

1 Chrome F12 enter image description here

2 结果enter image description here

这是我尝试抓取的网站:“ 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)

2 个答案:

答案 0 :(得分:4)

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

在这种情况下,请求goes to this api url。然后,您可以使用SVC执行类似的请求。但是请注意,此api端点需要正确的UserAgent标头。您可以使用fake-useragent之类的软件包,也可以仅硬编码代理的字符串。

requests

答案 1 :(得分:2)

欢迎使用StackOverflow! :)

您也可以选中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答复这些呼叫或模仿正常的用户交互。