【发布时间】:2019-12-08 06:45:27
【问题描述】:
soup.find 方法返回 None 而不是产品标题,尽管页面中存在 productTitle。 它适用于 amazon.it 但不适用于 amazon.com
import requests
from bs4 import BeautifulSoup
url = r'https://www.amazon.com/SanDisk-128GB-Extreme-microSD-Adapter/dp/B07FCMKK5X/ref=sr_1_1?fst=as:off&pf_rd_i=16225007011&pf_rd_m=ATVPDKIKX0DER&pf_rd_p=74069509-93ef-4a3c-8dca-a9e3fa773a64&pf_rd_r=HWWSV1CX6VJBC57MRVP6&pf_rd_s=merchandised-search-4&pf_rd_t=101&qid=1564513802&rnid=16225007011&s=computers-intl-ship&sr=1-1'
headers = {'User-Agent' : r'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36' }
page = requests.get(url, headers=headers)
soup = BeautifulSoup(page.content, 'html.parser')
fullprice = soup.find(id='productTitle')
print(fullprice)
【问题讨论】:
-
amazon.com可能会使用 JavaScript 添加一些元素,但 BS 不运行 JavaScript。您可能需要Selenium 来控制可以运行 JavaScript 的真实网络浏览器 -
页面有一处不同。您使用
inspect element看到的页面与python requests返回的页面不同。Python requests response相当于浏览器的view-source。这意味着它将包含从网络服务器发送给用户的initial page。 -
您应该检查
page.content中的内容 - 您会看到没有预期的数据。
标签: python html web-scraping beautifulsoup tags