我是python的新手,我正在尝试使用Python中的beautifulSoup从网站抓取一些文本评论。部分html结构如下,
<div style="1st level">
<div style="2nd level">Here is text 1</div>
<div style="2nd level">Here is text 2</div>
<div style="2nd level">Here is text 3</div>
<div style="2nd level">Here is text 4</div>
Here is text 5 and this is the part I want to get.
<div>
因此,文本1,2,3,4处于第二级,我不需要这些文本。我只想获得结构第一层的文本5。我的部分代码如下:
reviews=soup.find('div',style="1st level")
reviews=reviews.text
print reviews
但是后来我从文本1到文本5得到了所有内容。是否有一种简单的方法可以找到第一级并且只获得文本5?
答案 0 :(得分:0)
不确定这些方法是最好的,但试试看:
from bs4 import BeautifulSoup as soup
from collections import deque
input = """<div style="1st level">
<div style="2nd level">Here is text 1</div>
<div style="2nd level">Here is text 2</div>
<div style="2nd level">Here is text 3</div>
<div style="2nd level">Here is text 4</div>
Here is text 5 and this is the part I want to get.
<div>"""
web_soup = soup(input)
reviews = web_soup.find('div', style="1st level")
print reviews.contents[-2]
print deque(reviews.strings, maxlen=1).pop()
两个版画:
Here is text 5 and this is the part I want to get.
仅供参考,我使用deque
来获取strings
生成器中的最后一个元素。
并且,使用text()
,FYI,lxml + xpath可以更轻松地完成工作。
希望有所帮助。