Python和Beautiful Soup-搜索标记a,返回以下标记b';直到找到标记A为止

Python和Beautiful Soup-搜索标记a,返回以下标记b';直到找到标记A为止,python,beautifulsoup,Python,Beautifulsoup,我有两个变量,一个是“最后一卷”,另一个是“最后一期” 我正在处理的HTML包含所有卷和问题的列表,最新的是第一个 我需要返回比我的文件更新的所有卷和问题的href链接 因此,使用下面的示例,假设我的最后一卷是13,最后一期是1,我需要返回第13卷、第2卷和第14卷、第1卷的href 我有一个艰难的时间与此,因为该卷是自己的 以下是我到目前为止的情况: HTML: 因此,我可以访问文件上最后一个卷和问题的标记,但在遍历备份并在第一个问题停止时,我有过几次失败的尝试 或者从顶部开始向下遍历,直到满

我有两个变量,一个是“最后一卷”,另一个是“最后一期”

我正在处理的HTML包含所有卷和问题的列表,最新的是第一个

我需要返回比我的文件更新的所有卷和问题的href链接

因此,使用下面的示例,假设我的最后一卷是13,最后一期是1,我需要返回第13卷、第2卷和第14卷、第1卷的href

我有一个艰难的时间与此,因为该卷是自己的

以下是我到目前为止的情况:

HTML:

因此,我可以访问文件上最后一个卷和问题的标记,但在遍历备份并在第一个问题停止时,我有过几次失败的尝试

或者从顶部开始向下遍历,直到满足卷和发行条件


有人能帮我一下吗?谢谢。

我想您正在寻找,您可以这样使用:

import BeautifulSoup
import re

content='''
<ul class="bobby">
<li><strong>Volume 14</strong></li>
<li class="">
<a href="/content/ben/cchts/2011/00000014/00000001" title="Issue 1, September 2011">Issue 1, September 2011</a>          
</li>
<li><strong>Volume 13</strong></li> 
<li class="">
<a href="/content/ben/cchts/2010/00000013/00000002" title="Issue 2, December 2010">Issue 2, December 2010</a>
</li>
<li class="">
<a href="/content/ben/cchts/2011/00000014/00000001" title="Issue 1, November 2011">Issue 1, November 2011</a>
</li>
</ul>
'''

last_volume=13
last_issue=1

soup=BeautifulSoup.BeautifulSoup(content)
results = soup.find('ul', attrs={'class' : 'bobby'})
for a_string in results.findAll('a', text=re.compile('Issue')):
    volume=a_string.findPrevious(text=re.compile('Volume'))
    volume=int(re.search(r'(\d+)',volume).group(1))
    issue=int(re.search(r'(\d+)',a_string).group(1))
    href=a_string.parent['href']
    if (volume>last_volume) or (volume>=last_volume and issue>last_issue):    
        print(volume,issue,href)

我认为您正在寻找,您可以这样使用:

import BeautifulSoup
import re

content='''
<ul class="bobby">
<li><strong>Volume 14</strong></li>
<li class="">
<a href="/content/ben/cchts/2011/00000014/00000001" title="Issue 1, September 2011">Issue 1, September 2011</a>          
</li>
<li><strong>Volume 13</strong></li> 
<li class="">
<a href="/content/ben/cchts/2010/00000013/00000002" title="Issue 2, December 2010">Issue 2, December 2010</a>
</li>
<li class="">
<a href="/content/ben/cchts/2011/00000014/00000001" title="Issue 1, November 2011">Issue 1, November 2011</a>
</li>
</ul>
'''

last_volume=13
last_issue=1

soup=BeautifulSoup.BeautifulSoup(content)
results = soup.find('ul', attrs={'class' : 'bobby'})
for a_string in results.findAll('a', text=re.compile('Issue')):
    volume=a_string.findPrevious(text=re.compile('Volume'))
    volume=int(re.search(r'(\d+)',volume).group(1))
    issue=int(re.search(r'(\d+)',a_string).group(1))
    href=a_string.parent['href']
    if (volume>last_volume) or (volume>=last_volume and issue>last_issue):    
        print(volume,issue,href)
从美化组导入美化组
内容='''
  • 第14卷
  • 第13卷
''' 汤=美汤(内容) 汤 最后一卷=13 最后一期=1 res=soup.find('ul',{“class”:“bobby”}) lis=res.findAll('li') 对于lis中的j: 如果(j.find('strong')!=None): vol=int(j.contents[0]。字符串[7:]) elif(vol>last_vol)或(vol==last_vol和int(j.contents[1]['href'][33:])>last_发行: 打印“卷\t:%d”%vol 打印j.contents[1]。字符串 打印“href\t:%s”%j.contents[1]['href']
给予

卷数:14 2011年9月第1期 href:/content/ben/cchts/2011/00000014/00000001 卷:13 2010年12月第2期 href:/content/ben/cchts/2010/00000013/00000002
从美化组导入美化组
内容='''
  • 第14卷
  • 第13卷
''' 汤=美汤(内容) 汤 最后一卷=13 最后一期=1 res=soup.find('ul',{“class”:“bobby”}) lis=res.findAll('li') 对于lis中的j: 如果(j.find('strong')!=None): vol=int(j.contents[0]。字符串[7:]) elif(vol>last_vol)或(vol==last_vol和int(j.contents[1]['href'][33:])>last_发行: 打印“卷\t:%d”%vol 打印j.contents[1]。字符串 打印“href\t:%s”%j.contents[1]['href']
给予

卷数:14 2011年9月第1期 href:/content/ben/cchts/2011/00000014/00000001 卷:13 2010年12月第2期 href:/content/ben/cchts/2010/00000013/00000002
是的,我可以一起工作!非常感谢你。我欢迎其他解决方案,只是为了进一步了解,但这正是我希望获得的。事实上,我可能需要修改一下,因为有时卷和问题可能包含一个字符,例如问题1补充的1…是的,我可以使用!非常感谢你。我欢迎其他解决方案,只是为了进一步了解,但这正是我希望获得的。实际上,我可能需要对此进行一些修改,因为有时卷和问题可能包含一个字符,例如第1期增补的1s。。。
import BeautifulSoup
import re

content='''
<ul class="bobby">
<li><strong>Volume 14</strong></li>
<li class="">
<a href="/content/ben/cchts/2011/00000014/00000001" title="Issue 1, September 2011">Issue 1, September 2011</a>          
</li>
<li><strong>Volume 13</strong></li> 
<li class="">
<a href="/content/ben/cchts/2010/00000013/00000002" title="Issue 2, December 2010">Issue 2, December 2010</a>
</li>
<li class="">
<a href="/content/ben/cchts/2011/00000014/00000001" title="Issue 1, November 2011">Issue 1, November 2011</a>
</li>
</ul>
'''

last_volume=13
last_issue=1

soup=BeautifulSoup.BeautifulSoup(content)
results = soup.find('ul', attrs={'class' : 'bobby'})
for a_string in results.findAll('a', text=re.compile('Issue')):
    volume=a_string.findPrevious(text=re.compile('Volume'))
    volume=int(re.search(r'(\d+)',volume).group(1))
    issue=int(re.search(r'(\d+)',a_string).group(1))
    href=a_string.parent['href']
    if (volume>last_volume) or (volume>=last_volume and issue>last_issue):    
        print(volume,issue,href)
(14, 1, u'/content/ben/cchts/2011/00000014/00000001')
(13, 2, u'/content/ben/cchts/2010/00000013/00000002')
from BeautifulSoup import BeautifulSoup
content = '''<ul class="bobby">
<li><strong>Volume 14</strong></li>
<li class="">
<a href="/content/ben/cchts/2011/00000014/00000001" title="Issue 1, September     2011">Issue 1, September 2011</a>          
</li>
<li><strong>Volume 13</strong></li> 
<li class="">
<a href="/content/ben/cchts/2010/00000013/00000002" title="Issue 2, December 2010">Issue 2, December 2010</a>
</li>
<li class="">
<a href="/content/ben/cchts/2011/00000014/00000001" title="Issue 1, November 2011">Issue 1, November 2011</a>
</li>
</ul>
'''
soup = BeautifulSoup(content)
soup.prettify()
last_vol = 13
last_issue = 1

res = soup.find('ul',{"class":"bobby"})
lis = res.findAll('li')
for j in lis:
    if(j.find('strong') != None):
        vol = int(j.contents[0].string[7:])
    elif(vol > last_vol) or (vol == last_vol and int(j.contents[1]['href'][33:]) > last_issue): 
        print "Volume\t:%d" % vol
        print j.contents[1].string
        print "href\t:%s" % j.contents[1]['href']
Volume :14 Issue 1, September 2011 href :/content/ben/cchts/2011/00000014/00000001 Volume :13 Issue 2, December 2010 href :/content/ben/cchts/2010/00000013/00000002