我正在尝试解析一个HTML页面,简化后看起来像这样:
我是一个Python编程的初学者,我已经阅读并反复阅读了BeautifulSoup文档http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html。
我得到了以下代码:
我希望从类
同时,我也想从
最后,我想从类
有什么建议吗?谢谢!
<div class="anotherclass part"
<a href="http://example.com" >
<div class="column abc"><strike>£3.99</strike><br>£3.59</div>
<div class="column def"></div>
<div class="column ghi">1 Feb 2013</div>
<div class="column jkl">
<h4>A title</h4>
<p>
<img class="image" src="http://example.com/image.jpg">A, List, Of, Terms, To, Extract - 1 Feb 2013</p>
</div>
</a>
</div>
我是一个Python编程的初学者,我已经阅读并反复阅读了BeautifulSoup文档http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html。
我得到了以下代码:
from BeautifulSoup import BeautifulSoup
with open("file.html") as fp:
html = fp.read()
soup = BeautifulSoup(html)
parts = soup.findAll('a', attrs={"class":re.compile('part'), re.IGNORECASE} )
for part in parts:
mypart={}
# ghi
mypart['ghi'] = part.find(attrs={"class": re.compile('ghi')} ).string
# def
mypart['def'] = part.find(attrs={"class": re.compile('def')} ).string
# h4
mypart['title'] = part.find('h4').string
# jkl
mypart['other'] = part.find('p').string
# abc
pattern = re.compile( r'\&\#163\;(\d{1,}\.?\d{2}?)' )
theprices = re.findall( pattern, str(part) )
if len(theprices) == 2:
mypart['price'] = theprices[1]
mypart['rrp'] = theprices[0]
elif len(theprices) == 1:
mypart['price'] = theprices[0]
mypart['rrp'] = theprices[0]
else:
mypart['price'] = None
mypart['rrp'] = None
我希望从类
def
和ghi
中提取任何文本,我认为我的脚本已经正确实现了。同时,我也想从
abc
中提取两个价格,但目前我的脚本做得相当笨拙。这部分有时会有两个价格,有时只有一个,有时没有。最后,我想从类
jkl
中提取"A, List, Of, Terms, To, Extract"
部分,但我的脚本失败了。我认为获取p
标签的字符串部分应该可以工作,但我无法理解为什么它不起作用。这一部分中的日期始终与类ghi
中的日期相匹配,因此应该很容易替换/删除它。有什么建议吗?谢谢!
parse_price(text)
内部,你使用了item.string
而不是text
。 - tzelleke