我想使用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,它就会有效。我也想要这些。 –