我正在尝试学习如何通过 python 脚本从互联网获取信息。这里是:import requestsfrom bs4 import BeautifulSoupurl = 'https://www.amazon.es/Poco-NFC-Smartphone-Punch-Hole-Quad-c%C3%A1mara/dp/B08B9C149J/ref=sr_1_3?__mk_es_ES=%C3%85M%C3%85%C5%BD%C3%95%C3%91&dchild=1&keywords=poco%2Bx3&qid=1600179415&quartzVehicle=16-179&replacementKeywords=poco&sr=8-3&th=1'headers ={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36'}page = requests.get(url, headers=headers)soup = BeautifulSoup(page.content, "html.parser")title = soup.find( id='productTitle').get_text()问题是,当我应该获得在浏览器中看到的标题时,我却没有得到 ID“productTitle”搜索的结果。有任何想法吗?
3 回答
忽然笑
TA贡献1806条经验 获得超5个赞
id="productTitle"
这里的问题是响应的内容中不存在 的元素。您可以通过打开 Chrome 或其他浏览器中的“源”选项卡来验证这一点。按 Ctrl+Shift+I 并单击页面顶部的“源”。展开www.amazon.es
及其下的文件夹。单击该文件并按 Ctrl+F 并键入“productTitle”。没有找到。
您还会看到该页面有大量 JavaScript。当该代码在浏览器中运行时,很可能会将元素添加到 DOM。当您使用 requests 和 BeautifulSoup 时,不会执行此 JavaScript 代码,因此您不会获得与在浏览器中看到的完全相同的结果。
拉丁的传说
TA贡献1789条经验 获得超8个赞
当转到代码中提供的链接,然后在 HTML 代码中手动搜索“productTitle”时,会出现三个结果。问题可能是您只是得到第一个结果,因此而不是实际的标题。我猜你想要id=productTitle的跨度。尝试使用
soup.find("span", id='productTitle').get_text()
添加回答
举报
0/150
提交
取消