Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中查找两个标记之间的所有内容_Python_Python 2.7_Beautifulsoup - Fatal编程技术网

在python中查找两个标记之间的所有内容

在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导

我返回一个无限循环。因此,如果有人知道我如何解决这个问题,请与我分享

预期产出为:

用户名是:user1

文本是:这是user1的打开内容这是user1的内容这是user1的更多内容

用户名是:user2

文本是:这是user2的打开内容这是user2的内容这是user2的更多内容

等等……

试试这个:

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-谢谢。但这只会获取下一个标签。我已经澄清了我的要求