【问题标题】:Extracting nested span / p / div structure using beautiful soup使用美汤提取嵌套的 span/p/div 结构
【发布时间】:2021-07-12 20:12:38
【问题描述】:

我正在尝试从页面中提取这部分:

使用检查我看到:

inspect 视图中定义的结构是否总是遵循bs4 返回的内容?

我正在使用:

import json
import requests
from bs4 import BeautifulSoup

url = "https://docs.google.com/document/d/e/2PACX-1vSWVk1yd_I_zhVROYN2wv1r1y_54M-QL0199ZQ4g9mQZ7QdzekVzsRFUB_JVfkInwLxDNPmrwlY2x7y/pub?fbclid=IwAR0BsTNrbDeLb6j7tU2XhVxeh9WaQU_vELyDS3oNvem3eapiJ1zoBqZIYes"    
soup = BeautifulSoup(requests.get(url).content, "html.parser")  
data = soup.find_all('span',"c2")

但它会返回:

[<span class="c2"></span>,
 <span class="c2"></span>,
 <span class="c2">Gyventojai, kuriems yra daugiau nei 65 metai (1.14 prioritetas)</span>,
 <span class="c2"></span>,
 <span class="c2">——————————————————————</span>,
 <span class="c2"></span>,
 <span class="c2"></span>,
 <span class="c2"></span>,
 <span class="c2">Švietimo sistemos darbuotojai bei abiturientai (1.15 prioritetas)</span>,
 <span class="c2">Diplomatai (1.16)</span>,
 <span class="c2">Sergantieji lėtinėmis ligomis (1.17)</span>,
 <span class="c2">Socialinių paslaugų teikėjai (1.18)</span>,
 <span class="c2">1.20 prioritetas: gyvybiškai svarbias valstybės funkcijas atliekantys asmenys, kontaktuojantys su kitais asmenimis (pareigūnai, prekybos įmonių salės darbuotojai ir kt.), išskyrus bendrųjų funkcijų darbuotojus. Šiuo metu šio prioriteto sąrašai nuolat keliami.</span>,
 <span class="c2">Gyventojų grupė 55-64 m.</span>,
 <span class="c2"></span>,
 <span class="c2">.</span>,
 <span class="c2"></span>,
 <span class="c2"></span>,
 <span class="c2"></span>]

其中不包括&lt;p class="c6"&gt;&lt;span class="c2"&gt;ŠIUO METU - TIK SENJORAI:&lt;/span&gt;&lt;/p&gt;

我不确定为什么,因为它在检查视图和bs4 返回的data 中都清楚地说明了class c2

我是否应该始终遵循包含多个 find 语句的嵌套结构,或者获取所需数据的最佳做法是什么?

【问题讨论】:

  • 关于通过bs4按类名选择某些元素,看看this post
  • 它不会返回您所说的内容。
  • @WiktorStribiżew,可能是因为正如 Andrej 所说,课程不断变化。

标签: python html json beautifulsoup


【解决方案1】:

问题是,CSS 类名每次重新加载都会改变,所以有时是 c7,重新加载时是 c1 等等。

此示例将搜索包含“红色”颜色的 CSS 类名(如您所需的文本),然后使用该类名查找您的文本:

import re
import requests
from bs4 import BeautifulSoup


url = "https://docs.google.com/document/d/e/2PACX-1vSWVk1yd_I_zhVROYN2wv1r1y_54M-QL0199ZQ4g9mQZ7QdzekVzsRFUB_JVfkInwLxDNPmrwlY2x7y/pub?fbclid=IwAR0BsTNrbDeLb6j7tU2XhVxeh9WaQU_vELyDS3oNvem3eapiJ1zoBqZIYes"

html_doc = requests.get(url).text

# find CSS class name that is red:
class_name = re.search(r"\.(c\d+)\{color:#cc0000;", html_doc).group(1)
soup = BeautifulSoup(html_doc, "html.parser")

print(soup.find(class_=class_name).text)

打印:

ŠIUO METU - TIK SENJORAI:

【讨论】:

  • 谢谢。为什么课程不断变化?
  • @JonasPalačionis 我不知道(也许 Google 在其服务器上保留了各种版本的文档?)
猜你喜欢
  • 2019-04-21
  • 2018-05-08
  • 2015-07-16
  • 1970-01-01
  • 2016-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多