上次说到了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库函数

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

python爬虫之解析库正则表达式的更多相关文章

  1. python爬虫数据解析之正则表达式

    爬虫的一般分为四步,第二个步骤就是对爬取的数据进行解析. python爬虫一般使用三种解析方式,一正则表达式,二xpath,三BeautifulSoup. 这篇博客主要记录下正则表达式的使用. 正则表 ...

  2. Python爬虫【解析库之beautifulsoup】

    解析库的安装 pip3 install beautifulsoup4 初始化 BeautifulSoup(str,"解析库") from bs4 import BeautifulS ...

  3. python爬虫三大解析库之XPath解析库通俗易懂详讲

    目录 使用XPath解析库 @(这里写自定义目录标题) 使用XPath解析库 1.简介   XPath(全称XML Path Languang),即XML路径语言,是一种在XML文档中查找信息的语言. ...

  4. Python爬虫【解析库之pyquery】

    该库跟jQuery的使用方法基本一样  http://pyquery.readthedocs.io/ 官方文档 解析库的安装 pip3 install pyquery 初始化 1.字符串初始化 htm ...

  5. python爬虫之解析库Beautiful Soup

    为何要用Beautiful Soup Beautiful Soup是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式, 是一个 ...

  6. python爬虫数据解析之BeautifulSoup

    BeautifulSoup是一个可以从HTML或者XML文件中提取数据的python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式. BeautfulSoup是python爬虫三 ...

  7. Mac os 下 python爬虫相关的库和软件的安装

      由于最近正在放暑假,所以就自己开始学习python中有关爬虫的技术,因为发现其中需要安装许多库与软件所以就在这里记录一下以避免大家在安装时遇到一些不必要的坑. 一. 相关软件的安装:   1. h ...

  8. Python爬虫入门七之正则表达式

    在前面我们已经搞定了怎样获取页面的内容,不过还差一步,这么多杂乱的代码夹杂文字我们怎样把它提取出来整理呢?下面就开始介绍一个十分强大的工具,正则表达式! 1.了解正则表达式 正则表达式是对字符串操作的 ...

  9. python爬虫之urllib库(三)

    python爬虫之urllib库(三) urllib库 访问网页都是通过HTTP协议进行的,而HTTP协议是一种无状态的协议,即记不住来者何人.举个栗子,天猫上买东西,需要先登录天猫账号进入主页,再去 ...

随机推荐

  1. Servlet 启动顺序

    在servlet的配置当中,<load-on-startup>1</load-on-startup>的含义是: 标记容器是否在启动的时候就加载这个servlet. 当值为0或者 ...

  2. centos 增加网卡

    CentOS 6添加网卡的方法 (2013-11-26 17:19:44) 转载▼ 标签: it 分类: Linux 前段时间安装了1台XEN server虚拟机,之前只用了1个网卡,ip是10.11 ...

  3. 【http学习杂记】2017年7月14日

    1. 连接超时 连接超时是tcp协议层次, 此时服务器还没有处理请求数据,也就是说服务器的逻辑开没有执行 2. 请求超时 请求超时属于服务器已经连接成功并开始处理,但是时间比较长,大于你设置的请求超时 ...

  4. async/await actor promise 异步编程

    Python协程:从yield/send到async/await http://blog.guoyb.com/2016/07/03/python-coroutine/ Async/Await替代Pro ...

  5. [USACO09MAR]Cow Frisbee Team

    嘟嘟嘟 这个是一个很明显的dp,遇到这种倍数的问题的,就令dp[i][j]表示选到了第 i 只牛(不是选了 i 只牛),sum(Ri) % f == j 的方案数,则, dp[i][j] = dp[i ...

  6. Hadoop学习之路(十五)MapReduce的多Job串联和全局计数器

    MapReduce 多 Job 串联 需求 一个稍复杂点的处理逻辑往往需要多个 MapReduce 程序串联处理,多 job 的串联可以借助 MapReduce 框架的 JobControl 实现 实 ...

  7. virtualbox+vagrant学习-4-Vagrantfile-6-SSH Settings

    SSH Settings 配置命名空间:config.ssh config.ssh的设置涉及到将如何配置vagrant使其通过ssh访问你的计算机.与大多数vagrant设置一样,默认设置通常都很好, ...

  8. Java 中 Emoji 的正则表达式

    一.emoji 的范围 查阅维基百科中 emoji 的说明 1. 杂项符号及图形 杂项符号及图形一共有768个字符,范围为: U+1F300 - U+1F5FF,在 Java 中正则表达式为: &qu ...

  9. java中判断图片格式并且等比例压缩图片

    最近项目中需要判断上传的图片必须是png,jpg,gif三种格式的图片,并且当图片的宽度大于600px时,压缩图片至600px,并且等比例的压缩图片的高度. 具体的实现形式: 大致的思路是: 判断根据 ...

  10. Msys/MinGW与Cygwin/gcc

    一. MinGW MinGW 官方网站为 http://www.mingw.org/ MinGW,即 Minimalist GNU For Windows(GCC compiler suite).它是 ...