2017-07-12 72 views
0

我正在尋找從網頁中提取所有鏈接。我以前一直用這個過程來提取的「href」選項如:從Python頁面中提取所有鏈接

from bs4 import BeautifulSoup 
soup = BeautifulSoup(html_text, "lxml") 
for a in soup.findAll("a"): 
    print (a["href"]) 

然而,有些環節都有onclick屬性,而不是使用href

如:

<a href="#" onclick="window.open('link_to_open_was_here', '', 'height=400,width=600'); return false;" title="..." style="..." target="_blank">...</span></a> 

等菜單欄中的鏈接是用javascript'window.open選項構建的。

我大概可以編寫代碼來識別不符合href屬性的方式,但是有沒有更容易/更標準的方法從html頁面中提取所有鏈接?

跟帖:

我的方式來提取這是不是在「一」的標籤標準「href」屬性的一部分鏈接,可以很容易地提取(例如我想提取環節特別感興趣通過window.open()或javascript ...或其他鏈接包含在頁面中的方式提供)。相關地,因爲網站上的大多數鏈接都是相對的,所以在頁面上尋找以http開頭的文本不會捕獲它們全部。

+0

對不起,我誤解了問題。 Bs4不是用來解析js的,所以我不認爲有一個簡單的方法可以得到結果。作爲一個'hacky'解決方案,您可以使用正則表達式與'onclick'屬性進行鏈接。 –

回答

0

我能想到的一切搶奪的唯一辦法就是將整個湯結果轉換爲字符串,並使用正則表達式與http抓住一切:

soup = str(soup) 

links = re.findall(r'(http.*?)"', soup) 
+0

該解決方案有可能錯過相關鏈接,並且包含一些不想要的js或css文件鏈接。 限制爲內容可能已經排除了第二個缺點。 – b1ch0u

+0

也許,但在這種情況下沒有「不需要」的鏈接,因爲問題是從頁面中提取「所有」鏈接,至少在目前制定問題時。 – snapcrack

相關問題