1

ウェブページから特定のリンクを抽出する単純な python スクリプトを作成しようとしています。リンクを正常に抽出できましたが、そのWebページにあるような情報をさらに抽出したいと思い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 がその役目を果たしてくれると思います。

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 tuple 構文がそれを処理します。re.match を使用して、info 配列のメンバーから単純に照合します。

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(" ") 

翻訳するとスペース文字が残るため、必要なものに置き換えることができます。

Addl 情報はこちら

于 2012-05-24T19:08:47.667 に答える