2016-06-17 9 views
0

ウェブページの相対URLの代わりにurls absoluteを抽出することは可能ですか、whith beautifulsoup(python)ですか?例えばsanitize && build url

、私はhttp://bing.comをスクラップし、hrefのリンクを尋ねる:soup.findAll( 'A')にリンクするために を:

それは返すだけでなく、絶対URLより相対:

http://bing.com/?scope=web&FORM=Z9LH 
/maps/?FORM=Z9LH3 
/news?FORM=Z9LH4 
/explore?FORM=Z9LH5 
/profile/history?FORM=Z9LH6 
http://fr.msn.com/ 
http://www.office.com?WT.mc_id=O16_BingHP 

多くのありがとうございます。

+0

@Aonymousは、あなたが解析しているものと特定する必要があり、JavaScriptの'のようなのhrefがありますすべてのリンクを見つけて、それが動作することを期待してください。 –

+0

はい、それは私がリンクに感謝する関数を探している理由です。今、私は多くの場合、これを処理します。 – Anonymus

答えて

0

filter()とlambdasを使用してください。

urlList = filter(lambda aTag: aTag['href'].startswith('http'), soup('a'))

トリックを行う必要があります。

要するに、リンクの 'href'属性が文字列 'http'で始まるかどうかを確認します。あなたは親戚のものから絶対URLを再作成する場合

、あなたがこれを行うことができます:

urlThatCurrentlyScraping = 'http://bing.com/something/...' 
for link in soup('a'): 
    if not link['href'].startswith('http'): 
    fixedLinkHref = urlThatCurrentlyScraping + link['href'] 
    else: 
    fixedLinkHref = link['href'] 
    # do something 
+0

リンクを再作成したいと思います。 httpリンクだけを選択するのではありません:) – Anonymus

+0

あなたは、これらの相対URLに掻き回している現在のURLの前に追加してみてください。 – Quirk

+0

これは簡単ではありません。 たとえば、domain/pathが 'http://www.example.com/dirpath/'で、相対リンクが '/test.php'の場合、http://www.example.com/test.phpを返す必要があります。等。 bsで実装されていない場合は、 'else if'を置き、条件をリストします。ありがとうございました – Anonymus

1

をあなたが唯一絶対URLを一致させたい場合は、それを行うための最も簡単な方法は、CSS selectorを使用することです:

soup.select("a[href^=http]") 

ここで^=は「から始まる」という意味です。

あなたはすべてのリンクを検索し、相対URLのうち、絶対URLを行い、urljoin()を使用する場合:

from urlparse import urljoin 
# Python 3: from urllib.parse import urljoin 

base_url = "http://bing.com" 
for link in soup.find_all("a", href=True): 
    absolute_url = urljoin(base_url, link["href"]) 
    print(absolute_url) 

注URLはすでに絶対である場合であるとして、urljoin()はそれを残すだろうと。そのベースにあなたのナンセンスのURLを与えるために起こっていることを参加のボイド(0) `ページで、あなただけでなく、次のことができます。