2017-01-24 9 views
0

私は別のURLからすべてのリンクを解析する必要があります(しかし、私は解析すべきドメインを持つ共通のドメインを持っているリンクのみを取得する必要があります)。Python:いくつかのURLからすべてのリンクを解析します

私は

pages = set() 
def get_links(url, page_url): 
    global pages 
    html = urlopen(url + page_url) 
    page = BeautifulSoup(html, "html.parser") 
    for link in page.findAll("a", href=re.compile("^(/)")): 
     if 'href' in link.attrs: 
      if link.attrs['href'] not in pages: 
       new_page = link.attrs['href'] 
       pages.add(new_page) 
       try: 
        get_links(url, new_page) 
       except: 
        continue 
    return pages 

を使用する。しかし、このコードは、/で始まるすべてのリンクを返します。どのように私はこれをドメインに属するリンク、私が解析するリンクに制限できますか?

+1

リンク上のドメインに正規表現を使用しますか?これはかなり簡単なリストフィルタリングです... –

+0

@ JaredSmithのリンクは共通のパターンを持っていません –

+0

あなたはただ彼らがすべて同じドメインに属していると言いました。つまり、それらはすべて共通の部分文字列を共有しており、これは正規表現と一致する可能性があります。なぜそれをセットに追加する前に、あなたが物の存在をチェックしているのかも不明です。 –

答えて

0

はHREFを抽出するために、次の正規表現を使用します。

domain = re.escape('mydomain.com') 
regex = re.compile(r'(https?:\/\/)?(\w+\.)*%s(/[^\'"\s]+)?' % domain) 
+0

しかしそれはいつもこのようには見えません。時にはそれは単なるパスの続きであり、ドメインを含んでいません –

1
for a in soup('a', href=re.compile(r'^/ru/online_panels')): 
    print(a['href']) 

アウト:

/ru/online_panels/ 
/ru/online_panels/ 
/ru/online_panels/panel_quality/ 

考え方は同じである、で始まるすべてのhrefと一致します^後の文字列を入れてその文字列

関連する問題