在python中查找两个标记之间的所有内容
我返回一个无限循环。因此,如果有人知道我如何解决这个问题,请与我分享 预期产出为: 用户名是:user1 文本是:这是user1的打开内容这是user1的内容这是user1的更多内容 用户名是:user2 文本是:这是user2的打开内容这是user2的内容这是user2的更多内容 等等……试试这个:在python中查找两个标记之间的所有内容,python,python-2.7,beautifulsoup,Python,Python 2.7,Beautifulsoup,我返回一个无限循环。因此,如果有人知道我如何解决这个问题,请与我分享 预期产出为: 用户名是:user1 文本是:这是user1的打开内容这是user1的内容这是user1的更多内容 用户名是:user2 文本是:这是user2的打开内容这是user2的内容这是user2的更多内容 等等……试试这个: for i in soup.findAll('a'): while(i.nextSibling.name!='a'): print i.nextSibling 从bs4导
for i in soup.findAll('a'):
while(i.nextSibling.name!='a'):
print i.nextSibling
从bs4导入美化组
html=”“”
这是第一段,有一些细节
这是user1的打开内容
这是user1中的内容
这是user1提供的更多内容
这是user2的打开内容
这是user2的内容
这是user1提供的更多内容
"""
soup=BeautifulSoup(html)
因为我在汤里。找到所有的('a'):
打印“名称:”,即文本
对于[i,i.parent.find_next_sibling()]中的s:
虽然没有:
如果s.find('a')无:
打破
打印“内容:”,s.text
s=s.查找下一个兄弟姐妹()
(注意:find_all
是findAll
的推荐名称,在较老的汤中可能不起作用。与find_next_sibling
相同)尝试以下方法:
for i in soup.findAll('a'):
while(i.nextSibling.name!='a'):
print i.nextSibling
从bs4导入美化组
html=”“”
这是第一段,有一些细节
这是user1的打开内容
这是user1中的内容
这是user1提供的更多内容
这是user2的打开内容
这是user2的内容
这是user1提供的更多内容
"""
soup=BeautifulSoup(html)
因为我在汤里。找到所有的('a'):
打印“名称:”,即文本
对于[i,i.parent.find_next_sibling()]中的s:
虽然没有:
如果s.find('a')无:
打破
打印“内容:”,s.text
s=s.查找下一个兄弟姐妹()
(注意:
find_all
是findAll
的推荐名称,在较老的汤中可能不起作用。与find_next_sibling
相同)一个选项是使用find_all()
搜索每个标记,并为每个链接使用find_all_next()
搜索包含每个用户内容的标签。以下脚本提取用户名及其内容,并将两者保存为列表中的元组:
from bs4 import BeautifulSoup
html="""
<p>This is the first paragraph with some details</p>
<p><a href="user123">user1</a><font>This is opening contents for user1</font></p>
<p><font>This is the contents from user1</font></p>
<font><p>This is more content from user1</p></font>
<p><a href="user234">user2</a><font>This is opening contents for user2</font></p>
<p><font>This is the contents from user2</font></p>
<font><p>This is more content from user1</p></font>
"""
soup = BeautifulSoup(html)
for i in soup.find_all('a'):
print 'name:', i.text
for s in [i, i.parent.find_next_sibling()]:
while s <> None:
if s.find('a') <> None:
break
print 'contents:', s.text
s = s.find_next_sibling()
它产生:
from bs4 import BeautifulSoup
l = []
soup = BeautifulSoup(open('htmlfile'))
for link in soup.find_all('a'):
s = []
for elem in link.find_all_next(['font', 'a']):
if elem.name == 'a':
break
s.append(elem.string)
user_content = ' '.join(s)
l.append((link.string, user_content))
一个选项是使用find_all()
搜索每个
标记,对于每个链接,使用find_all_next()
搜索包含每个用户内容的
标记。以下脚本提取用户名及其内容,并将两者保存为列表中的元组:
from bs4 import BeautifulSoup
html="""
<p>This is the first paragraph with some details</p>
<p><a href="user123">user1</a><font>This is opening contents for user1</font></p>
<p><font>This is the contents from user1</font></p>
<font><p>This is more content from user1</p></font>
<p><a href="user234">user2</a><font>This is opening contents for user2</font></p>
<p><font>This is the contents from user2</font></p>
<font><p>This is more content from user1</p></font>
"""
soup = BeautifulSoup(html)
for i in soup.find_all('a'):
print 'name:', i.text
for s in [i, i.parent.find_next_sibling()]:
while s <> None:
if s.find('a') <> None:
break
print 'contents:', s.text
s = s.find_next_sibling()
它产生:
from bs4 import BeautifulSoup
l = []
soup = BeautifulSoup(open('htmlfile'))
for link in soup.find_all('a'):
s = []
for elem in link.find_all_next(['font', 'a']):
if elem.name == 'a':
break
s.append(elem.string)
user_content = ' '.join(s)
l.append((link.string, user_content))
第2行和第4行缺少结束语
。在你的例子中这是一个错误,还是真的是这样?你得到一个无限循环的原因是你没有遍历i
的兄弟姐妹,你每次都在看同一个兄弟姐妹。@nickie--那是错误的。.我现在已经更正了…好吧,那么我认为我的解决方案有效。在你上次编辑之后,第4行和第7行中的标记
和
嵌套不正确。第2行和第4行中缺少结束标记
。在你的例子中这是一个错误,还是真的是这样?你得到一个无限循环的原因是你没有遍历i
的兄弟姐妹,你每次都在看同一个兄弟姐妹。@nickie--那是错误的。.我现在已经更正了…好吧,那么我认为我的解决方案有效。在你上次编辑之后,第4行和第7行中的标记
和
嵌套不当。感谢您的解决方案。但它只产出了部分油田。假设两个“a”标记之间有不同的标记名,我想提取这些标记的所有内容。这是一个问题,因为我的html非常不一致。我正在寻找的东西,提取所有数据,直到它找到另一个“a”tag@user2657822:您的意思是提取
标记之间的所有文本吗?为什么不在问题中添加预期的输出?它会更清晰。@Birei-我现在已经编辑过了。希望它是清楚的。谢谢你的邀请suggestion@user2657822:我已经编辑了答案。请注意,我必须修复您的示例数据,
和
标记在某些行中混合使用。@user2657822:输出是我所期望的。感谢您的解决方案。但它只产出了部分油田。假设两个“a”标记之间有不同的标记名,我想提取这些标记的所有内容。这是一个问题,因为我的html非常不一致。我正在寻找的东西,提取所有数据,直到它找到另一个“a”tag@user2657822:您的意思是提取
标记之间的所有文本吗?为什么不在问题中添加预期的输出?它会更清晰。@Birei-我现在已经编辑过了。希望它是清楚的。谢谢你的邀请suggestion@user2657822:我已经编辑了答案。请注意,我必须修复您的示例数据,
和
标记在某些行中混合使用。@user2657822:输出是我需要的。@nickie-谢谢。但这只会获取下一个标签。我现在已经澄清了我的要求。我希望我新编辑的问题会更清楚。那么也修复了答案。@nickie非常感谢。它比以前更好用了。由于我处理的是大数据,所以我提出了另一种情况,即“a”标记中有一个“font”标记,该标记也包含一些内容。根据您的解决方案,它不会显示。例如,这是为用户1打开的内容。我还更新了原来的问题,使其清晰。再次感谢你。这太过分了,我就到此为止。我相信你已经知道了。干杯…现在很好..我还学习了新东西..对不起,我只是在学习python,所以有很多疑问..但是现在它被清除了..非常感谢..@nickie-谢谢。但这只会获取下一个标签。我已经澄清了我的要求