python - 有没有办法找到类名并获取父标签的整个文本?

标签 python beautifulsoup html-parsing

我有很多 html 文件,我必须获取文件的完整标题。 标题标签位置不同:class="c6", class="c7"

我试过BeautifulSoup

for head_c6 in soup.find_all('span', attrs={'class': 'c6'}):
        print(head_c6.get_text())
for head_c7 in soup.find_all('span', attrs={'class': 'c7'}):
        print(head_c7.get_text())

但结果:

2017 年第三季度美国运通联合财报电话 session - 最终长度:

2016 年第 2 季度 Akamai Technologies Inc 电话 session - 最终 yield

这里是不同文件的样子:

文件 1

<div class="c4">
<p class="c5">
<span class="c6">
      Q3 2017 American Express Co Earnings Call - Final
     </span>
</p>
</div>
<div class="c4">
<p class="c5">
<span class="c7">
      LENGTH:
     </span>
<span class="c2">
      11051 words
     </span>
</p>
</div>

文件 2

<div class="c4">
<p class="c5">
<span class="c6">
      Q2 2018 Akamai Technologies Inc
     </span>
<span class="c7">
      Earnings
     </span>
<span class="c6">
      Call - Final
     </span>
</p>
</div>

文件 3

<div class="c4">
    <p class="c5">
     <span class="c6">
      Q4 2018
     </span>
     <span class="c7">
      Facebook
     </span>
     <span class="c6">
      Inc
     </span>
     <span class="c7">
      Earnings
     </span>
     <span class="c6">
      Call - Final
     </span>
    </p>

我想要的是获取标题的全文:

2017 年第三季度美国运通联合财报电话 session - 最终

2018 年第 2 季度 Akamai Technologies Inc 财报​​电话 session - 最终

Facebook Inc 2018 年第 4 季度财报电话 session - 最终

最佳答案

使用正则表达式re 我已经更新了最后一个文件 html。您可以对其余文件执行相同的操作

from bs4 import BeautifulSoup
import re
data='''<div class="c4">
    <p class="c5">
     <span class="c6">
      Q4 2018
     </span>
     <span class="c7">
      Facebook
     </span>
     <span class="c6">
      Inc
     </span>
     <span class="c7">
      Earnings
     </span>
     <span class="c6">
      Call - Final
     </span>
    </p>'''

soup=BeautifulSoup(data,'html.parser')

items=[item.text.strip() for item in soup.find_all('span', class_=re.compile("c"))]
stritem=' '.join(items)
print(stritem.replace('\n',''))

输出:

 Q4 2018 Facebook Inc Earnings Call - Final

您也可以使用以下方式。

items=[item.text.strip() for item in soup.find_all('span', class_=re.compile("c6|c7"))]
stritem=' '.join(items)
print(stritem.replace('\n',''))

或尝试获取父标记文本。

from bs4 import BeautifulSoup
import re
data='''<div class="c4">
    <p class="c5">
     <span class="c6">
      Q4 2018
     </span>
     <span class="c7">
      Facebook
     </span>
     <span class="c6">
      Inc
     </span>
     <span class="c7">
      Earnings
     </span>
     <span class="c6">
      Call - Final
     </span>
    </p>'''

soup=BeautifulSoup(data,'html.parser')
childtag=soup.find('span', class_=re.compile("c6|c7"))
parenttag=childtag.parent
print(parenttag.text.replace('\n',''))

关于python - 有没有办法找到类名并获取父标签的整个文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56127598/

相关文章:

python - 访问 "module scope"变量

android - jsoup 解析 tr,td 与类和 id for 循环

c# - Html 敏捷包不加载 url

python - 没有条件的 if 语句

python - 仍然没有适用于 Python 3(或 3.3)的 wxPython?

python - 读取关卡脚本在某些站点上发送错误 "IndexError: string index out of range"

python - 如何在新列中保存正在读取 pandas read_html() 函数的 url?

Python HTML 解析,获取标签名称及其值

xml - 将维基百科中的表格加载到 R

javascript - python 瓶 : Assigning a python variable to Javascript variable