2017-03-22 128 views
0

我使用XPath //*[@href]從網頁上刮取鏈接。但是,我注意到,除了頁面上的實際鏈接Selenium也刮javascript:void(0)XPath // * [@ href]不僅刮取鏈接

爲什麼會發生這種情況?

如果您在http://google.com上運行此測試,您會發現45個鏈接 - 其中3個並非實際鏈接,而是javascript:void(0)。

如何解決?

更新:上http://google.com預期輸出(寫這篇文章的時間)如下:

1 = https://www.google.com/images/branding/product/ico/googleg_lodp.ico 
2 = https://www.google.com/ 
3 = https://www.google.com/setprefs?suggon=2&prev=https://www.google.com/?gws_rd%3Dssl&sig=0_OQUUDCX_hZxBr1qNxxxxxxxxxxxEH_4%3D 
4 = https://mail.google.com/mail/?tab=wm 
5 = https://www.google.com/imghp?hl=en&tab=wi&ei=3NfSWL2xxxxxxxBg&ved=0EKouCBgoAQ 
6 = https://www.google.com/intl/en/options/ 
7 = https://myaccount.google.com/?utm_source=OGB 
8 = https://www.google.com/webhp?tab=ww&ei=3NfSWL2DKpxxxxxxxg&ved=0EKkuCAIoAQ 
9 = https://maps.google.com/maps?hl=en&tab=wl 
10 = https://www.youtube.com/ 
11 = https://play.google.com/?hl=en&tab=w8 
12 = https://news.google.com/nwshp?hl=en&tab=wn&ei=3NfSWL2xxxxxxxxxxxBg&ved=0EKkuCAYoBQ 
13 = https://mail.google.com/mail/?tab=wm 
14 = https://drive.google.com/?tab=wo 
15 = https://www.google.com/calendar?tab=wc 
16 = https://plus.google.com/?gpsrc=ogpy0&tab=wX 
17 = https://translate.google.com/?hl=en&tab=wT 
18 = https://photos.google.com/?tab=wq&pageId=none 
19 = https://www.google.com/intl/en/options/ 
20 = http://www.google.com/shopping?hl=en&tab=wf&ei=3NxxxxxxxxxTYBg&ved=0EKkuCA0oDA 
21 = https://wallet.google.com/?tab=wa 
22 = https://www.google.com/finance?tab=we 
23 = https://docs.google.com/document/?usp=docs_alc 
24 = https://books.google.com/bkshp?hl=en&tab=wp&ei=3NfSWL2xxxxxxxxxxxBg&ved=0EKkuCBEoEA 
25 = https://www.blogger.com/?tab=wj 
26 = https://www.google.com/contacts/?hl=en&tab=wC 
27 = https://hangouts.google.com/ 
28 = https://keep.google.com/ 
29 = https://www.google.com/intl/en/options/ 
30 = https://accounts.google.com/ServiceLogin?hl=en&passive=true&continue=https://www.google.com/%3Fgws_rd%3Dssl 
----------------------- (removed) 
32 = https://www.google.com/url?q=https://www.google.com/intl/en_us/homepage/search/sp-firefox.html%3Futm_source%3Dgoogle.com%26utm_medium%3Dpushdown%26utm_content%3Dswitch%26utm_campaign%3Dffdse&source=hpp&id=190xx319&ct=7&usg=AFxxxxxxxxbZR_QouKfSxxxxxxxuQ&cot=2 
33 = https://www.google.com/webhp?hl=en&sa=X&ved=0ahUKxxxxxy8-rSAxxxxxxxx8QPAgD 
34 = https://support.google.com/websearch/answer/186645?hl=en 
35 = https://www.google.com/intl/en/policies/privacy/?fg=1 
36 = https://www.google.com/intl/en/policies/terms/?fg=1 
37 = https://www.google.com/preferences?hl=en 
38 = https://www.google.com/preferences?hl=en&fg=1 
39 = https://www.google.com/advanced_search?hl=en&fg=1 
40 = https://www.google.com/history/optout?hl=en&fg=1 
41 = https://support.google.com/websearch/?p=ws_results_help&hl=en&fg=1 
------------------ (removed) 
43 = https://www.google.com/intl/en/ads/?fg=1 
44 = https://www.google.com/services/?fg=1 
45 = https://www.google.com/intl/en/about.html?fg=1 
+0

爲什麼你認爲它只會刮鏈接? – shmosel

+0

足夠公平的它會刮擦任何與HREF屬性,所以有沒有辦法只刮擦鏈接或我需要過濾使用某種正則表達式的結果? –

+0

您可以使用像'starts-with'或'contains'這樣的XPath函數來檢查URL模式。 – shmosel

回答

2

如果你真的需要得到以「href」屬性的所有元素,除了這2個鏈接,那麼你可以使用未來的XPath:

//*[@href][not(contains(@href,'javascript:void'))] 
+0

謝謝。我認爲這是唯一的XPath,它可以在不移除任何良好鏈接的情況下消除不良內容。根據需要清除43個鏈接。 –

1

如果你想獲得一個包含URL作爲參考錨,你可以使用下面XPath表達:

"//a[starts-with(@href, 'http')]" 

這應包括URLshttphttps模式

+0

這可以刪除'javascript:void(0)',但它也會刪除其他10個鏈接。它將鏈接總數從45減少到31(並且只有3個鏈接是我們不想要的類型) –

+0

您能澄清您準確得到的輸出嗎?例如,從https://google.com ...您想要獲取搜索結果列表嗎? – Andersson

+0

我已經用期望的輸出更新了OP。 –