在 Python 中抓取时如何同时打印段落和标题?

知乎

我是python的初学者。我目前正在使用 Beautifulsoup 来抓取网站。

str='' #my_url
source = urllib.request.urlopen(str);
soup = bs.BeautifulSoup(source,'lxml');
match=soup.find('article',class_='xyz');
for paragraph in match.find_all('p'):
    str+=paragraph.text+"\n"

我的标签结构 -

<article class="xyz" >
<h4>dr</h4>
<p>efkl</p>
<h4>dr</h4>
<p>efkl</p>
<h4>dr</h4>
<p>efkl</p>
<h4>dr</h4>
<p>efkl</p>         
</article>


我得到这样的输出(因为我能够提取段落)-

 efkl
 efkl
 efkl
 efkl

我想要的输出(我想要标题和段落)-

 dr
 efkl
 dr
 efkl
 dr
 efkl
 dr
 efkl     

我希望我的输出还包含标题和段落。如何修改代码,使其在段落之前包含标题(就像在原始 HTML 中一样)。

SIM卡

你可以用不同的方法剥同一个苹果来达到目的。以下是其中一些:

使用.find_next()

from bs4 import BeautifulSoup

content="""
<article class="xyz" >
<h4>dr</h4>
<p>efkl</p>
<h4>dr</h4>
<p>efkl</p>
<h4>dr</h4>
<p>efkl</p>
<h4>dr</h4>
<p>efkl</p>         
</article>
"""
soup = BeautifulSoup(content,"lxml")

for items in soup.find_all(class_="xyz"):
    data = '\n'.join(['\n'.join([item.text,item.find_next("p").text]) for item in items.find_all("h4")])
    print(data)

使用.find_previous_sibling()

for items in soup.find_all(class_="xyz"):
    data = '\n'.join(['\n'.join([item.find_previous_sibling("h4").text,item.text]) for item in items.find_all("p")])
    print(data)

常用方法:在列表中使用多个标签:

for items in soup.find_all(class_="xyz"):
    data = '\n'.join([item.text for item in items.find_all(["h4","p"])])
    print(data)

所有三种方法都会产生相同的结果:

dr
efkl
dr
efkl
dr
efkl
dr
efkl

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

尝试在python的Beatutifulsoap中尝试仅通过网络抓取获取文本时打印标签和元素

Python HTML Web抓取标题和标题

如何单击Google趋势中的“加载更多”按钮并通过Selenium和Python打印所有标题

如何在python中逐行打印Wikipedia的抓取表?

如何在文本中打印所有标题-Python / BeautifulSoup

在Python中打印时如何减少变量?

网页抓取python中打印网址的问题

Python 网页抓取 | 如何使用 try 和 except 处理丢失的元素,以便在未找到元素时将其打印为不可用?

如何从python和beautifulsoup中的页面抓取iframe数据范围

如何使用 Python 和 BeautifulSoup 从 html 表中抓取数据?

同时打印和输入python多线程

如何抓取网页上的所有文本直到python中的特定标题?

Python:抓取网站主 URL 和标题的谷歌结果

使用 Form() 时如何更改 Python 中的 MainWindow 标题?

如何在 Python 中同时迭代和运行 AsyncGenerator

如何在python中同时使用封装和继承

如何从 Python 中的输入同时附加和覆盖文件

如何在“for循环”python中同时打印数组中的第一个和第二个值

(Python) 如何同时使用 selenium 和 requests 打印出一个微软页面

当标题浮动时如何将标题和段落放在单独的行中?

如何使用python获取html页面中的标题和url

尝试如何使用Selenium和Python抓取orbitz.com时,Field XPath会如何变化?

如何从Google趋势中提取标题/文本并通过Selenium和Python打印它们

如何使用Beautifulsoup-python从div中特定标题的段落元素中的网页元素中提取网页文本

抓取时摆脱python中的html标签

当网站阻止不抓取内容时,如何使用Python抓取?

Python - 如何在写入 MS Word 时将段落设为粗体和红色?

如何使用python根据网站的标题抓取网站?

如何使用Selenium和Python抓取注释?