【问题标题】:I can't get the text from an URL (BeautifullSoup)我无法从 URL 中获取文本 (BeautifulSoup)
【发布时间】:2020-09-15 23:29:00
【问题描述】:

我正在尝试学习如何通过 python 脚本从 Internet 获取信息。这里是:

import requests
from bs4 import BeautifulSoup

url = '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' 搜索,我没有得到任何结果。

有什么想法吗?

【问题讨论】:

  • 当您在浏览器中加载页面时,浏览器将执行 JavaScript 资源,这些资源可能会通过向 DOM 添加元素来操作页面。 requestsBeautifulSoup 都不会执行这段 JavaScript 代码。
  • 是的,但我看到人们使用相同的代码可以获得我想要的信息。
  • 你在哪里看到这个代码?

标签: python beautifulsoup


【解决方案1】:

转到代码中提供的链接,然后在 HTML 代码中手动搜索“productTitle”时,会出现三个结果。问题可能是您只是获得了第一个结果,因此没有获得实际的标题。我猜你想要带有 id=productTitlespan。尝试使用

soup.find("span", id='productTitle').get_text()

【讨论】:

  • 获得第一个结果不会是None
  • 试过了,但它不起作用。我认为我得到的汤没有扩大,所以它没有显示我需要的完整标题。
【解决方案2】:

这里的问题是id="productTitle"的元素在响应的内容中不存在。您可以通过在 Chrome 或其他浏览器中打开 Sources 选项卡来验证这一点。按 Ctrl+Shift+I 并单击页面顶部的 Sources。展开www.amazon.es 及其下的文件夹。单击文件并按 Ctrl+F 并键入“productTitle”。没找到。

您还会看到此页面包含大量 JavaScript。最有可能的是,当该代码在浏览器中运行时,它会将元素添加到 DOM。当您使用 requests 和 BeautifulSoup 时,此 JavaScript 代码不会执行,因此您不会得到与在浏览器中看到的完全相同的结果。

【讨论】:

    【解决方案3】:

    具有讽刺意味的是,亚马逊不喜欢机器人通过那里的东西。他们在像美丽的汤、硒等东西上放了一种障碍。 看看链接: https://stackoverflow.com/a/56050730/14166952

    【讨论】:

    • 我已经在我的代码中做到了。它不工作,我不知道为什么:S.
    猜你喜欢
    • 1970-01-01
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 2020-05-03
    • 2019-10-25
    • 2020-05-19
    相关资源
    最近更新 更多