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

实验目的:获取“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 部分可以是一些非特殊字符,也可以是”/“符号

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,098评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,323评论 19 139
  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    aimaile阅读 26,687评论 6 427
  • 世界上总有这样一些人,一生都在寻找自己的价值,却一直未果。但是不可否认,他们也是幸福的。我总在想,什么才是我所想要...
    零桶阅读 1,391评论 0 0
  • “中文社会科学引文索引”(CSSCI)来源期刊(以下简称C刊)刚刚公布最新年度目录,这个消息,对学术期刊界,对广大...
    墨岛观察阅读 3,352评论 0 2