1

我正在尝试制作一个简单的 python 脚本来从网页中提取某些链接。我能够成功提取链接,但现在我想提取更多信息,例如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']

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

我上面提到的xpath生成所需的信息,但它是ill-formatted不可能用任何逻辑实现我所需的格式,至少我无法做到这一点。

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

4

3 回答 3

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/

于 2012-05-24T20:11:59.910 回答
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
于 2012-05-24T19:04:54.653 回答
0

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

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

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

info[0, len(info)] 

完全,或:

info.rfind(" ") 

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

添加信息在这里找到

于 2012-05-24T19:08:47.667 回答