我正在尝试制作一个简单的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
,因为至少我无法用任何逻辑来实现我所需的格式。
那么,有没有办法以我的格式实现输出。?
答案 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