【问题标题】:Python Beautiful Soup not pulling all the dataPython Beautiful Soup 没有提取所有数据
【发布时间】:2021-04-12 10:53:43
【问题描述】:

我目前正在寻找使用 Beautiful Soup 从 Luxembourg Stock Exchange 的具有特定类和 ID 的 URL html 提取特定发行人数据。

我使用的示例链接在这里:https://www.bourse.lu/security/XS1338503920/234821 我试图提取的数据是以文本形式存储的“发行者”下的名称;在这种情况下,它是“BNP Paribas Issuance BV”。

我尝试使用类 vignette-description-content-text,但它似乎找不到任何数据,因为在查看汤时,并非所有的 html 都在拉。

我发现我现在的代码只拉取了部分html,不知道如何扩展它拉取的数据。

import requests
from bs4 import BeautifulSoup

URL = "https://www.bourse.lu/security/XS1338503920/234821"

page = requests.get(URL)

soup = BeautifulSoup(page.content, 'html.parser')

results = soup.find(id='ResultsContainer', class_="vignette-description-content-text")

我发现了类似的问题并遵循了link 1link 2link 3 中显示的指南,但使用的示例 html 似乎与我要抓取的网页非常不同。

我缺少什么来提取和抓取数据吗?

【问题讨论】:

  • 我认为问题可能是您想要的数据是由网页上的javascript生成的,而不是实际的html。使用 selenium 而不是 beautifulsoup 可能会更幸运。但我对硒并不熟悉。希望其他人可以提供更多帮助。祝你好运。

标签: python html web-scraping beautifulsoup


【解决方案1】:

根据您的代码,我怀疑您正在尝试获取具有 class=vignette-description-content-textid=ResultsContaine 的元素。 class_ 是正确的使用方式,但不是 id

试试这个:

import requests
from bs4 import BeautifulSoup

URL = "https://www.bourse.lu/security/XS1338503920/234821"
page = requests.get(URL)
soup = BeautifulSoup(page.content, 'html.parser')

def applyFilter(element):
   if element.has_attr('id') and element.has_attr('class'):
      if "vignette-description-content-text" in element['class'] and element['id'] == "ResultsContainer":
         return True

results = soup.find_all(applyFilter)
for result in results:
   #Each result is an element here

【讨论】:

  • 嗨@Shreyesh,感谢您抽出宝贵时间。我尝试使用您在上面定义的过滤器函数运行代码,但是,我仍然得到一个空的结果数组。问题仍然不是所有的 html 都没有被 Beautifulsoup 函数拉取吗?
  • 它是一个 javascript 页面,因此最终呈现的页面不是请求模块返回的数据的一部分。您可能需要考虑使用 selenium 获取呈现的最终 HTML,在其中您使用浏览器及其驱动程序(例如:here
猜你喜欢
  • 2023-01-13
  • 2018-05-30
  • 1970-01-01
  • 2018-09-15
  • 1970-01-01
  • 2020-08-26
  • 1970-01-01
  • 2021-03-27
  • 2021-03-11
相关资源
最近更新 更多