Python网络爬虫学习笔记(四)

链接爬虫

      目的:把一个网页中所有的链接地址提取出来

      实现思路:

  1. 确定好要爬取的入口链接
  2. 根据需求构建好链接提取的正则表达式
  3. 模拟成浏览器并爬取对应网页
  4. 根据2中的正则表达式提取出该网页中包含的链接
  5. 过滤掉重复的链接
  6. 后续操作,例如打印这些链接

     以下程序是获取“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])

运行结果如下:


猜你喜欢

转载自blog.csdn.net/qq_29599907/article/details/80744944