【问题标题】:How to extract all children & sub children HTML code from a parent container? Python webscraping如何从父容器中提取所有子和子 HTML 代码? Python 网页抓取
【发布时间】:2021-10-12 12:08:27
【问题描述】:

我想抓取一大段 HTML 代码并将其加载到本地新创建的 HTML 文件中。

首先我必须在 HTML 代码中找到正确的容器。我目前在 python 中使用 BeautifulSoup 模块来查找父容器(div):

url = 'https://darksky.net/details/52.3673,4.8998/2021-8-8/ca24/en'
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
raw_weather_forecast = soup.find('div',class_= "timeline_container")
print(raw_weather_forecast)

然而,这只会返回容器的 HTML 代码加上子容器,而不是这些子容器的 HTML 内容(我也想抓取):

<div class="timeline_container" id="timeline">
<div class="timeline">
<div class="stripes"></div>
<div class="hour_ticks"></div>
<div class="hours"></div>
<div class="temps"></div>
</div>
</div>

我想收集的部分 HTML 代码示例(只有一个可以更好地了解问题)(它是一张图片,因为它是相当多的代码):HTML code

我将如何解决这个问题?在python中有没有一种有效的方法来做到这一点?

提前致谢!

卢克

PS。 为了让您更好地了解我为什么要实现这一目标。当我醒来时,我希望我的电视显示我所在地区的天气预报。我正在使用带有 HDMI cec 的树莓派在该起床时激活我的电视。然后,我希望它加载并显示某些内容(例如我的议程和那天的天气预报),这将在一天开始时对我有所帮助。

【问题讨论】:

  • 你可以添加你正在抓取的网址吗?提供更好的答案很容易
  • 此外,您提供的输出是正确的。因为我猜soup.find 不返回一个数组,而是soup.find_all 返回一个。
  • 我添加了网址@oxsapphir3。你是对的,我的下一段代码改变了输出,它创建了新的 html 文件。我更正了。
  • 很好。我已经发布了答案。我想它会帮助你

标签: python html beautifulsoup containers weather


【解决方案1】:

如果您想再次从给定输出中找到父级中的子级,您可以使用 BeautifulSoup 函数解析输出。

例子:

url = 'https://darksky.net/details/52.3673,4.8998/2021-8-8/ca24/en'

response = requests.get(url)

soup = BeautifulSoup(response.text, "html.parser")

raw_weather_forecast = soup.find('div',class_= "timeline_container")

# If you want to iterate through all the divs, then you can do like this:

for node in raw_weather_forecast.find_all("div"):
    print(node.text)

print(raw_weather_forecast.find("div" , class_="hour_ticks").text)

它会给出一个空的输出,因为没有文本。

【讨论】:

  • 我可以为每个子容器循环执行此操作吗?或者我是否为每个新孩子(或节点可以这么说)硬编码。
  • 是的,您可以循环执行此操作。我正在根据您的要求更新答案。
  • 看看吧!我已经添加了。
  • hour_ticks 容器包含几个我想收集的跨度,其他容器也是如此。否则,如果父 ('class_ = "timeline_container") 容器内的任何 HTML 代码发生更改,这将需要很多行代码并且可能会破坏我的代码。
  • 您可以添加嵌套循环。但是,如果您认为您的代码可能会中断,您可以在嵌套循环之外添加 try-except 块。
猜你喜欢
  • 1970-01-01
  • 2018-05-14
  • 1970-01-01
  • 2019-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-20
  • 2019-08-06
相关资源
最近更新 更多