簡體   English   中英

使用BeautifulSoup根據包含在其中的字符串提取li元素

[英]Using BeautifulSoup to extract an li element based on a string contained within

我一直在嘗試使用BeautifulSoup檢索任何包含以下單詞的任何格式的<li>元素: Ottawa 問題在於, ottawa永遠不會位於自己的標簽之內,例如<p> 所以我只想打印包含Ottawa li元素。

HTML格式如下:

<html>
<body>
<blockquote>
<ul><li><a href="http://link.com"><b>name</b></a>
(National: Ottawa, ON)
<blockquote> some description </blockquote></li>
<li><a href="http://link2.com"><b>name</b></a>
(National: Vancouver, BC)
<blockquote> some description </blockquote></li>
<li><a href="http://link3.com"><b>name</b></a>
(Local: Ottawa, ON)
<blockquote> some description </blockquote></li>
</ul>
</blockquote>
</body>
</html>

我的代碼如下:

from bs4 import BeautifulSoup
import re
import urllib2,sys

url = "http://www.charityvillage.ca/cv/nonpr/nonpr1.html"
html = urllib2.urlopen(url).read()
soup = BeautifulSoup(html)

re1='.*?'
re2='(Ottawa)'
ottawa = soup.findAll(text=re.compile(re1+re2,re.IGNORECASE|re.DOTALL))
search = soup.findAll('li')

上面代碼的結果正確地找到了渥太華,並且當使用它來查找li元素時,它確實找到了li元素,但是它給了我頁面上的每一個。

我了解他們目前沒有聯系search = soup.findAll('li', text=re.compile(re1+re2,re.IGNORECASE|re.DOTALL))因為嘗試在[]執行search = soup.findAll('li', text=re.compile(re1+re2,re.IGNORECASE|re.DOTALL))結果

我的最終目標基本上是獲取每個包含Ottawa <li>元素,並為我提供整個<li>元素的名稱,說明,鏈接等。

使用text屬性來過濾findAll的結果:

elems = [elem for elem in soup.findAll('li') if 'Ottawa' in str(elem.text)]
from bs4 import BeautifulSoup
import re
import urllib2,sys

url = "http://www.charityvillage.ca/cv/nonpr/nonpr1.html"
html = urllib2.urlopen(url).read()
soup = BeautifulSoup(html)

for item in soup.find_all(text=re.compile('\(.+: Ottawa', re.IGNORECASE)):
    link = item.find_previous_sibling(lambda tag: tag.has_key('href'))
    if link is None:
        continue
    print(u'{} [{}]: {}'.format(link.text,
                               item.strip(),
                               link['href']).encode('utf8'))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM