链接爬虫
目的:把一个网页中所有的链接地址提取出来
实现思路:
- 确定好要爬取的入口链接
- 根据需求构建好链接提取的正则表达式
- 模拟成浏览器并爬取对应网页
- 根据2中的正则表达式提取出该网页中包含的链接
- 过滤掉重复的链接
- 后续操作,例如打印这些链接
以下程序是获取“http://blog.csdn.net/”网页上的所有链接
import re
import urllib.request
import urllib.error
def getlink(url):
#模拟成浏览器
headers=("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36")
opener=urllib.request.build_opener()
opener.addheaders=[headers]
#将opener安装为全局
"""注:urlopen()不支持验证、cookie或者其他HTTP的高级功能
想要支持这些功能,必须使用build_opener()来创建自定义的opener对象
将opener安装为全局作为urlopen()使用的全局对象,即以后调用uelopen()都会使用自定义的opener对象"""
urllib.request.install_opener(opener)
file=urllib.request.urlopen(url) #爬取网页内容
data=str(file.read()) #转化为string
pat='(https?://[^\s)";]+\.(\w|/)*)' #设计正则表达式,用于提取网页中的所有链接
link=re.compile(pat).findall(data)
link=list(set(link)) #用set将link转化成集合来去除重复链接,再转化成list
return link
if __name__=='__main__':
url="http://blog.csdn.net/"
linklist=getlink(url)
for link in linklist:
print(link[0])
运行结果如下: