2016-04-28 38 views
-1

我仍然在學習圍繞Python的方式,所以我希望有人可以幫助我通過並避免一些手動步驟來思考此問題。Python建議:編譯包含關鍵字但只包含唯一有效鏈接的網址列表

我需要編譯/創建表單

Institution, LinkToSpecificWebPage 

其中鏈路包括具體工作(這個說法可以說「存儲」)的列表

我所面臨的問題是,每個機構可以使用不同的表格或結構到我需要的網頁的網址(有些使用store.institution.tld,其他Institution.tld/store 也取決於該機構使用的網絡平臺可能是完整的網址或它可能是相對鏈接/店鋪

我已經使用BS4返回所有包含「store」的鏈接並將它們打印出來。

我的問題是我如何建立一個列表,以便每個機構列出併爲每個機構有一個完整的URL到他們的商店

是否有一個更優雅的方式比if語句和試驗HTTP或www字符串?

鏈接樣品中發現 代碼輸出機構名稱,機構主頁(無論是從較早的處理,然後從各網站首頁包含我感興趣的文字鏈接(S)。 我已經刪除一些重複的,但你可以像有時那麼它可能有一個很好形成完整的鏈接返回相同的鏈接出現在頁面上多次,但它不一定是第一個

InstName,HomePage.url,link.get('href') 

Marino Institute http://www.mie.ie/ /Library.aspx 
TCD http://www.tcd.ie/ /Library/ 
DIT http://www.dit.ie/ http://dit.ie/library/ 
IT Tallaght http://www.it-tallaght.ie/ libraryservice3 
LYIT http://www.lyit.ie/#!prettyPhoto http://library1.lyit.ie/ 
DCU http://www.dcu.ie/ /library/index.shtml 
NUIG http://www.nuigalway.ie/ //www.library.nuigalway.ie/ 
+0

你可以添加你刮的頁面的一個片段,顯示了一些機構和他們聯繫的? – sowa

回答

1

使用Python裏urlparse(見documentation)你可以解析每個部分url,然後將這些部分重新組合成一個url假設如果第三列中有一個域,那麼該URL優先於第二列中的內容。

from urlparse import urlsplit, urlunsplit 

data = [["Marino Institute","http://www.mie.ie/","/Library.aspx"], 
["TCD", "http://www.tcd.ie/", "/Library/"], 
["DIT", "http://www.dit.ie/", "http://dit.ie/library/"], 
["IT Tallaght", "http://www.it-tallaght.ie/", "libraryservice3"], 
["LYIT", "http://www.lyit.ie/#!prettyPhoto", "http://library1.lyit.ie/"], 
["DCU", "http://www.dcu.ie/", "/library/index.shtml"], 
["NUIG", "http://www.nuigalway.ie/", "//www.library.nuigalway.ie/"]] 


def merge_urls(partial_url1, partial_url2): 

    o1 = urlsplit(partial_url1) 
    o2 = urlsplit(partial_url2) 

    # domain of o2 takes precedence over domain in o1 
    if(o2.netloc != ''): 
     o3 = o2 
     o2 = o1 
     o1 = o3 

    schemes, netlocs, paths, queries, fragments = zip(o1, o2) 
    scheme = schemes[0] if schemes[0] != '' else schemes[1] 
    netloc = netlocs[0] if netlocs[0] != '' else netlocs[1] 
    path = paths[0] if paths[0] != '/' else paths[1] 
    query = queries[0] if queries[0] != '' else queries[1] 
    fragment = fragments[0] if fragments[0] != '' else fragments[1] 

    return urlunsplit((scheme, netloc, path, query, fragment)) 

for d in data: 
    print d[0], merge_urls(d[1], d[2]) 

此輸出,

Marino Institute http://www.mie.ie/Library.aspx 
TCD http://www.tcd.ie/Library/ 
DIT http://dit.ie/library/ 
IT Tallaght http://www.it-tallaght.ie/libraryservice3 
LYIT http://library1.lyit.ie/#!prettyPhoto 
DCU http://www.dcu.ie/library/index.shtml 
NUIG http://www.library.nuigalway.ie/ 
相關問題