美文网首页
【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