以特定格式从网页中提取信息

时间:2012-05-24 18:46:08

标签: python xpath lxml

我正在尝试制作一个简单的python脚本来从webpage中提取某些链接。我能够成功提取链接,但现在我想提取更多信息,例如该网页上给出的bitrate,size,duration

我使用下面的xpath来提取上面提到的信息

>>> doc = lxml.html.parse('http://mp3skull.com/mp3/linkin_park_faint.html')
>>> info = doc.xpath(".//*[@id='song_html']/div[1]/text()")
>>> info[0:7]
['\n\t\t\t', '\n\t\t\t\t3.71 mb\t\t\t', '\n\t\t\t', '\n\t\t\t\t3.49 mb\t\t\t', '\n\t\t\t', '\n\t\t\t\t192 kbps', '2:41']

现在我需要的是,对于特定链接,我需要的信息是以tuple的形式生成的,如(bitrate,size,duration)

我上面提到的xpath会生成所需的信息,但它是ill-formatted,因为至少我无法用任何逻辑来实现我所需的格式。

那么,有没有办法以我的格式实现输出。?

3 个答案:

答案 0 :(得分:2)

我认为BeautifulSoup将完成这项工作,它甚至可以解析格式错误的HTML:

http://www.crummy.com/software/BeautifulSoup/

使用BeautifulSoup解析非常简单 - 例如:

import bs4
import urllib
soup = bs4.BeautifulSoup(urllib.urlopen('http://mp3skull.com/mp3/linkin_park_faint.html').read())

print soup.find_all('a')

并且有很好的文档: http://www.crummy.com/software/BeautifulSoup/bs4/doc/

答案 1 :(得分:0)

你是如何使用正则表达式和python的re模块的?

http://docs.python.org/library/re.html可能是必不可少的。

至于从数组中获取数据,re.match(regex,info[n])应该足够了,就三元组而言,python元组语法会处理它。只需将您的信息数组成员与re.match匹配。

import re


matching_re = '.*'    # this re matches whole strings, rather than what you need
incoming_value_1 = re.match(matching_re,info[1])
# etc. 
var truple = (incoming_value_1, incoming_value_2, incoming_value_2

答案 2 :(得分:0)

您可以使用XPath实际删除所有内容:

translate(.//*[@id='song_html']/div[1]/text(), "\n\t,'", '') 

因此,对于您的其他问题,请:

info[0, len(info)] 
完全

,或者:

info.rfind(" ") 

由于翻译会留下空格字符,但您可以将其替换为您想要的任何内容。

发现添加信息here