我想使用Python獲取給定「根」URL(在列表中)的域中的所有鏈接。假設給定了一個URL http://www.example.com這應該返回與根URL相同的域的這個頁面上的所有鏈接,然後對訪問它們的這些鏈接中的每一個進行遞歸,並提取同一個域的所有鏈接等等。我的意思是相同的域名是如果給出http://www.example.com我想要回的唯一鏈接是http://www.example.com/something,http://www.example.com/somethingelse ...任何外部如http://www.otherwebsite.com應該被丟棄。我如何使用Python來做到這一點?如何使用Python獲取域中的所有鏈接?
編輯:我做了一個嘗試使用lxml。我不認爲這是完全可行的,我不知道如何考慮到已處理頁面的鏈接(導致無限循環)。
import urllib
import lxml.html
#given a url returns list of all sublinks within the same domain
def getLinks(url):
urlList = []
urlList.append(url)
sublinks = getSubLinks(url)
for link in sublinks:
absolute = url+'/'+link
urlList.extend(getLinks(absolute))
return urlList
#determine whether two links are within the same domain
def sameDomain(url, dom):
return url.startswith(dom)
#get tree of sublinks in same domain, url is root
def getSubLinks(url):
sublinks = []
connection = urllib.urlopen(url)
dom = lxml.html.fromstring(connection.read())
for link in dom.xpath('//a/@href'):
if not (link.startswith('#') or link.startswith('http') or link.startswith('mailto:')):
sublinks.append(link)
return sublinks
〜
從問題標籤,你似乎已經知道要使用什麼。也許你可以展示你的嘗試,否則我認爲這個問題太籠統了。有圍繞如[scrapy](http://scrapy.org/)的網頁抓取框架可能會幫助你。 – mhawke
這個問題很困難,因爲頁面中的某些鏈接沒有被協議作爲前綴並提供本地路徑。 「..」是一個有效的URL。你想遵循什麼而不是? –
我只想跟隨以URL爲前綴的任何內容。但是,一些相關鏈接沒有以根URL作爲前綴,但是如果我在它們前面加了根URL,它就會有效。我也想要這些。 –