我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python爬虫之解析库正则表达式

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python爬虫之解析库正则表达式

   上次说到了requests库的获取,然而这只是开始,你获取了网页的源代码,但是这并不是我们的目的,我们的目的是解析链接里面的信息,比如各种属性  @href  @class span  抑或是p节点里面的文本内容,但是我们需要一种工具来帮我们寻找出这些节点,总不能让我们自己一个一个复制粘贴来完成吧,那样的话,还要程序员干嘛>>计算机是为了方便人们才被发明出来的.

  这次我们使用一个非常好用的工具>>正则表达式,可能有的大佬已经听说过了,哦,就是那么一个东西,并说,不是用css选择器或者xpath,beautifulsoup来解析不是更好吗?当然,我开始的时候也是听大佬们这么说的,但是再一些简单的提取信息里,正则表达式的速度确实是最快的,而且有相同的结构的话,构造的表达式更快,关于正则表达式详解大家可以去百度一下>>正则表达式详解<<那里有更多的使用方法,我只是总结利用了一些我个人认为比较好用的正则表达式用法.

 例如我们获取了以下的一个网页源代码:

 

 我们想要获取br节点里面的IP地址,怎么办呢/我们可以构造表达式   首先我们得了解一下元字符:

  这里说明了匹配得用法,\w就是匹配除了非字符的,例如空格 , $%^.!@#这些全部别省略而过,因为不符合匹配规则,想要匹配空格,就要换成\s  这里我们再了解一下限定符的概念:

  限定符的意思根据我的理解是匹配该符合匹配规则的次数,如果没有要求,它可能匹配出全部给你,也可能只匹配第一个结果给你,限定符就起到了匹配次数的效果,让你做到想使用匹配规则多少次就多少次.下面是一些常用的正则表达式:

 

 

   可能大家看的有些疑惑,那是因为你之前没有接触过表达式,但是你参照一下上面的规则,再参悟一下,多尝试匹配,看看错在哪里,大概坚持一两天,你就会有一种豁然开朗的感觉,哦,原来是这么一回事啊,我理解一下一个规则用法,比如用户名的匹配规则:<<   /^是匹配的开始  然后到[a-z0-9  是说匹配从a到z和0到9的所有字符,然后是_-,,它说明在里面可以匹配下划线_和字符- ,{3,16}是匹配从3次到16次,意思是说该用户可能限制在3到16字节,超过就没有意义了,多了就会导致提取信息的不纯洁性了>>  当然有时候我们想偷懒怎么办,这些规则有太复杂了,光是构造就得花费很多时间了,这时候,我最喜欢得懒惰限定符出现了,先看规则:

 

       这里可以这样理解 (.*)是匹配尽可能多的字符串,(.*?)是匹配尽可能匹配少的字符   在python中()表示返回匹配得内容,内容为()里面得字符,如果你想获取@href的属性,直接构造为('.*?href="(.*?)" ,h.*?')就可以获取href的属性了,不过要记住,它返回的是一个列表的形式,所以你想要实现分行显示,还要对列表进行遍历,输入到文本中,继而实现简单的爬取信息.演示如下:

 

 我把我自己写的源代码贴出来,可能不是很完善,只是一个很简单的函数,哪里有缺陷大佬们指出一下

# -*- coding: utf-8 -*-
# author :HXM
from lxml import etree
import requests
import re
from fake_useragent import UserAgent
def page():
        
        ua=UserAgent()

        url=input("请输入代理网页:")
        #https://proxy.horocn.com/day-free-proxy/e8ZG.html

        headers={'User-Agent' : ua.random}

        response=requests.get(url,headers=headers)

        if response.status_code==200:
        
                datas=response.text

                pattern=re.compile('.*?<br />(.*?)#.*?<br />',re.S)#re.S表示换行匹配,不受行数限制,python常用pattern来封装表达式规则,极大方便了调用

                result=re.findall(pattern,datas)

                print(type(result))

                for results in result:

                        with open ("ip.txt","a",encoding="utf-8") as f:
                                
                                f.write("{}\n".format(results))
        return None
page()

 

  这里还要说一个重要的匹配方式,是python中独有的

  import re  #表示导入正则表达式

  re.match表示是从第一字符开始匹配,如果规则没有从第一个字符开始表示,尽管你想要的信息就在HTML里面,你也匹配不出来

  re.search表示只匹配符合规则的第一字符并返回结果,对匹配限定符规则是无效的,即不遵守限定匹配次数

  re.findall表示匹配所有符合规则的字符,遵守限定次数规则,最常用的匹配re库函数

   好了,正则表达式就介绍到这里,不过这只是皮毛而已,不过对我们目前应该是够用的,后面还有零断宽言等,大家有兴趣可以了解一下>

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python爬虫之解析库正则表达式

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python爬虫之解析库正则表达式

上次说到了requests库的获取,然而这只是开始,你获取了网页的源代码,但是这并不是我们的目的,我们的目的是解析链接里面的信息,比如各种属性  @href  @class span  抑或是p节点里面的文本内容,但是我们需要一种工具来帮我
2023-01-30

爬虫之正则表达式

1.学习爬虫,为什么必须会正则表达式?    我们爬取一些网页具体内容时,只需要这个网页某个标签的一部分内容就足够,或者是这个标签的某个属性的值时,用普通的 xpath 或者css.selector是不能完成的,此时我们就需用到正则表达式去
2023-01-30

Python爬虫之正则表达式(1)

廖雪峰正则表达式学习笔记1:用\d可以匹配一个数字;用\w可以匹配一个字母或数字;'00\d' 可以匹配‘007’,但是无法匹配‘00A’;‘\d\d\d’可以匹配‘010’;‘\w\w\d’可以匹配‘py3’;2:.可以匹配任意字符;'p
2023-01-30

玩转python爬虫之正则表达式

面对大量杂乱的代码夹杂文字我们怎样把它提取出来整理呢?下面就开始介绍一个十分强大的工具,正则表达式! 1.了解正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,
2022-06-04

Python 爬虫学习笔记之正则表达式

正则表达式的使用 想要学习 Python 爬虫 , 首先需要了解一下正则表达式的使用,下面我们就来看看如何使用。 . 的使用这个时候的点就相当于一个占位符,可以匹配任意一个字符,什么意思呢?看个例子就知道import re content
2022-06-04

Python爬虫正则表达式怎么理解

本篇内容介绍了“Python爬虫正则表达式怎么理解”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!元字符^ $ * + . | ? {} []
2023-06-17

python进阶之正则表达式

概念:  正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。目的?      给定一个正则表达式和另一个字符串,我们可以达
2023-01-30

python爬虫入门教程--正则表达式完全指南(五)

前言 正则表达式处理文本有如疾风扫秋叶,绝大部分编程语言都内置支持正则表达式,它应用在诸如表单验证、文本提取、替换等场景。爬虫系统更是离不开正则表达式,用好正则表达式往往能收到事半功倍的效果。 介绍正则表达式前,先来看一个问题,下面这段文本
2022-06-04

Python的爬虫包Beautiful Soup中用正则表达式来搜索

Beautiful Soup使用时,一般可以通过指定对应的name和attrs去搜索,特定的名字和属性,以找到所需要的部分的html代码。 但是,有时候,会遇到,对于要处理的内容中,其name或attr的值,有多种可能,尤其是符合某一规律,
2022-06-04

理解python正则表达式

在python中,对正则表达式的支持是通过re模块来支持的。使用re的步骤是先把表达式字符串编译成pattern实例,然后在使用pattern去匹配文本获取结果。 其实也有另外一种方式,就是直接使用re模块的方法,但是这样就不能使用编译后的
2022-06-04

python模块之re正则表达式详解

一、简单介绍 正则表达式是一种小型的、高度专业化的编程语言,并不是python中特有的,是许多编程语言中基础而又重要的一部分。在python中,主要通过re模块来实现。 正则表达式模式被编译成一系列的字节码,然后由用c编写的匹配引擎执行。那
2022-06-04

python模块之re(正则表达式)

匹配模式re.ASCII同re.A,对应的内联标识为(?a),用于向后兼容。使元字符\w, \W, \b, \B, \d, \D, \s和\S仅匹配ASCII字符。该模式只在string模式下有意义,在byte模式下将被忽略。re.DEBU
2023-01-31

python--模块之re正则表达式

简介:正则表达式本身是一个小型的、高度专业化的编程语言,而在python中,通过内嵌集成re模块,我们可以通过直接调用来实现正则匹配。正则表达式基础知识:--普通字符匹配自身 abc ----abc--元字符 . :匹配任何字符(
2023-01-30

Python中使用正则表达式及正则表达式匹配规则详解

这篇文章主要介绍了Python中使用正则表达式以及正则表达式匹配规则,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-03-22

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录