У меня есть две переменные, одна с "последним томом", а другая с "последней проблемой".
В HTML, с которым я столкнулся, содержится список всех томов и выпусков, наиболее свежий в первую очередь.
Мне нужно вернуть ссылки href для всех томов и проблем, которые новее, чем то, что у меня есть в файле.
Поэтому, используя приведенный ниже пример, скажем, что мой последний том равен 13, а последний номер - 1, мне нужно будет вернуть href для vol 13, 2 и vol 14, 1.
Мне сложно с этим справиться, поскольку объем сам по себе...
Вот что я имею до сих пор:
HTML:
<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>
Скрипичный скрипт:
results = soup.find('ul', attrs={'class' : 'bobby'})
#temp until I get it reading from file
lastVol = '13'
#find the last volume
findlastVol = results.findNext('strong', text= re.compile('Volume ' + lastVol))
#temp until I get it reading from file
lastIss = '2'
#find the last issue
findlastIss = findlastVol.findNext('a', text= re.compile('Issue ' + lastIss))
Поэтому я могу перейти к тегу для последнего тома и выпуску файла, но у меня было несколько неудачных попыток сделать резервную копию и остановиться в первом выпуске...
Или начинать с вершины и обходить вниз до тех пор, пока не будет достигнуто условие объема и выпуска...
Может кто-нибудь, пожалуйста, помогите мне? Благодарю.
Я думаю, что вы ищете findPrevious, который вы можете использовать следующим образом:
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