美文网首页
【Python爬虫】正则爬取CSDN链接

【Python爬虫】正则爬取CSDN链接

作者: 倔强的潇洒小姐 | 来源:发表于2017-09-14 22:14 被阅读109次
    实验目的:获取“http://blog.csdn.net/”网页上的所有链接

    思路

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

    源代码:

    # -*- coding: utf-8 -*-
    # __author__ = 'Carina'    
    
    import re    # 导入正则表达式
    import urllib.request
    
    
    def getlink(csdnurl):
        # 模拟成浏览器
        headers = ("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0")
        opener = urllib.request.build_opener()    # 修改表头信息
        opener.addheaders = [headers]
        # 将opener安装为全局
        urllib.request.install_opener(opener)
        file = urllib.request.urlopen(csdnurl)
        data = str(file.read())
        # print(data)
        # 根据需求构建好链接表达式
        pat = '(https?:// [^\s)";]+\.(\w|/)*)'
        link = re.compile(pat).findall(data)
        print(link)
        # 去除重复数据
        link = list(set(link))
        return link
    # 要爬取的网页链接
    csdnurl = "http://blog.csdn.net/"
    # 获取对应网页中包含的链接地址
    linklist = getlink(csdnurl)
    # 通过for 循环分别遍历输出获取到的链接地址到屏幕上
    for link in linklist:
        print(link[0])
    
    浏览器F12.png

    正则表达式的构造不一定是固定的,需要根据需求来调整,只有更好,没有最好

    针对代码中的表达式 (https?:// [^\s)";]+.(\w|/)*) 做下简单的解释

    确定链接的简单版格式:http(s)://xxx.yyy
    1、协议部分有些是 http,有些是 https,s? 表示s可有可无
    2、xxx 部分 不可以出现空格,双引号,分号
    3、yyy 部分可以是一些非特殊字符,也可以是”/“符号

    相关文章

      网友评论

          本文标题:【Python爬虫】正则爬取CSDN链接

          本文链接:https://www.haomeiwen.com/subject/uadjsxtx.html