美文网首页
【Data_Talks】Python学习笔记-Ch5正则表达式

【Data_Talks】Python学习笔记-Ch5正则表达式

作者: 滢滢_5402 | 来源:发表于2018-08-25 10:54 被阅读0次

    爬虫项目的重要一步就是分析网页结构,抓取并返回特定的value,比如爬房价的租金、房型、小区等。此时需要找到request返回的网页内容的特定标签比如<a>,<div>等,并返回到dataframe,再进行数据清洗和处理。一般可以用的两个工具(库):1. 正则表达式(re);2(beautifulsoup4)。下面就介绍了正则表达式的主要功能:即匹配、查找、分割、替换等。

    1. 为什么要在字符串前加r'?

    避免将字符串中可能出现的\等转意字符进行转意,使用r后,则其作为一个raw string。比如\n在转意的场景下为“换行”命令;而\n在raw string下则为两个字符分别是\,n.

    2. match与search的差异

    match从头部开始匹配,一旦失败,返回结果;search则查找整个字符串,直到找到一个匹配值;

    3. 正则修饰符

    用以限制通用的匹配规则

    4.正则表达式模式

    4.1字母和数字代表他们本身

    4.2\字母和\数字通常有特殊意义

    4.3标点符号通常有特殊意义,除非被转义他们才是他自己

    4.4反斜杠本身需要使用反斜杠转义:r'\'='\\'

    5. 项目实战-通过正则表达式爬取链家的租房页详情url

    5.1 网页结构分析

    链家的北京租房信息页是一个租房信息清单(如下图),共计100页(每页30套房源),这里以其中的第一页为例,一起看看如何批量抓取当页所有房源的详情页url。大体的思路是:通过网页的机构分析,找出详情页url在汇总页的一个独特标签,从而使用正则表达式对其进行查找和返回(re.findall())

    这里要推荐chrome浏览器超好用的F12开发者工具,必须是网页机构分析利器。开发者工具的左上角小图标可以对网页对应元素进行查找对应code。

    经过分析发现:详情页的url均出现在<div标签class属性=pic-panel下的<a标签里的href属性(tips:网页里url通常都出现在href属性后)。

    于是有了下面这个正则表达式规则pi='<div.*?class="pic-panel">.*?<a.*?target.*?href="(.*?)"'。具体的含义是:.*?均为转义符:.匹配任意字符;*则匹配该任意字符可出现0~无限次;?则对该组合仅匹配一次(非贪婪匹配);注意“.*?”为常用模糊匹配的组合,用的多就熟练记住啦,可以代替空格、换行或者中间夹杂的一大堆字母,对特定标签出现的地方进行定位。href后面的(代表对查找的数据pi进行切片,仅就该切片部分返回列表-即url部分)。这种方法非常适合于查找类似AXXB这样的字符串,即明确前后出现的字符串(A、B),返回中间的部分(XX)。

    5.2 代码

    大致代码如下:

    相关文章

      网友评论

          本文标题:【Data_Talks】Python学习笔记-Ch5正则表达式

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