3

HTML ファイル全体を解析し、Python の Beautifulsoup モジュールでいくつかの URL を抽出しました。

for link in soup.find_all('a'):
    for line in link :
        if "condition" in line :

           print link.get("href")

そして、ifループの状態を観察する一連のリンクをシェルで取得します。

  • http:// ..link1
  • http:// ..link2
  • .
  • .
  • http:// ..linkn

このリストの最初のリンクのみを変数「出力」に入れるにはどうすればよいですか?

編集:

Web ページはhttp://download.cyanogenmod.com/?device=p970で、スクリプトは HTML ページの最初の短い URL (http://get.cm/...) を返す必要があります。

4

2 に答える 2

6

ワンライナーでそれを行うことができます:

import re

soup.find('a', href=re.compile('^http://get.cm/get'))['href']

それを変数に割り当てるには:

variable=soup.find('a', href=re.compile('^http://get.cm/get'))['href']

私はあなたが何をしているのか正確にはわからないので、最初から完全なコードを投稿します:NB! bs4 を使用する場合は、インポートを変更します

import urllib2
from BeautifulSoup import BeautifulSoup
import re

request = urllib2.Request("http://download.cyanogenmod.com/?device=p970")
response = urllib2.urlopen(request)
soup = BeautifulSoup(response)
variable=soup.find('a', href=re.compile('^http://get.cm/get'))['href']
print variable

>>> 
http://get.cm/get/4jj
于 2012-10-14T14:58:03.860 に答える
1

ループなしの BeautifulSoup では、これをより簡単かつ明確に行うことができます。

解析された BeautifulSoup オブジェクトの名前が次のようになっていると仮定しますsoup

output = soup.find(lambda tag: tag.name=='a' and "condition" in tag).attrs['href']
print output

このfindメソッドは最初の結果のみをfind_all返し、すべての結果を返すことに注意してください。

于 2012-10-14T15:49:37.997 に答える