正则表达式及实战分析

一级目录

二级目录

三级目录

正则表达式练习

一.简单验证手机号码格式

  1. 开头可能是0(长途)、86(中国国际区号)、17951(国际电话)中的一个,或者一个都没有:

    re.compile('^(0|86|17591)?$')#^是开头,|代表或者
    
  2. 接着是 1 x x , 有 13 x , 14 x , 15 x , 17 x , 18 x 1xx,有13x,14x,15x,17x,18x 1xx,13x,14x,15x,17x,18x,其中 13 x , 15 x , 18 x 中的 x 范围为 [ 0 , 9 ] , 14 x 中的 x 可能取值为 5 , 7 , 9 , 17 x 的 x 可能取值为 0 , 6 , 7 , 9 13x,15x,18x中的x范围为[0,9],14x中的x可能取值为5,7,9,17x的x可能取值为0,6,7,9 13x,15x,18x中的x范围为[0,9],14x中的x可能取值为5,7,9,17xx可能取值为0,6,7,9

    re.compile('^(0|86|17591)?(13[0-9]|14[579]|15[0-9|17[0679]|18[0-9])')
    
  3. 匹配最后8个数字,这8个数字范围为8,长度为8

    re.compile("^(0|86|17591)?(13[0-9]|14[579]|15[0-9|17[0679]|18[0-9])[0-9]{8}$"
    

二.验证各类杂项示例

  • 匹配中文:

    [\u4e00-\u9fa4]
    
  • 匹配双字节字符:

    [^\x00-\xff]
    
  • 匹配数字并输入示例:

    import re
    a='你的网站被访问了1000次'
    #方法一:#使用\d{1,10}匹配1到10数字
    b=re.findall("\d{1,10}",a)
    print(b)
    #方法二:使用(.*?)匹配
    c=re.findall('你的网站被访问了(.*?)次',a)
    print(c)
    #方法三:用[^\u4e00-\u9fa4]匹配非汉字
    d=re.findall('[^\u4e00-\u9fa4]',a)
    print(d)
    

​ 输出结果:

[‘1000’]
[‘1000’]
[‘1’, ‘0’, ‘0’, ‘0’]

爬取市级编码列表

目标网址:http://www.weather.com.cn/textFC/hb.shtml
]

打开网址,点击任何一个城市,以朝阳区为例,就会跳到http://www.weather.com.cn/weather/101010300.shtml这个网址,这里的101010300就是我们想要的城市编码

现在我们来解析数据:

这个fake_user_agent模块可以自动生成User-Agent,不需要我们再去找,是一个很好用的模块

import requests
from fake_user_agent import user_agent
ua=user_agent()
headers={
    'Referer':'http://www.weather.com.cn/textFC/jiangxi.shtml',
    'User-Agent':ua
}
url='http://www.weather.com.cn/textFC/hb.shtml'
response=requests.get(url=url,headers=headers)
response.encoding='utf-8'
print(response.text)

接下来我们就用正则表达式来提取,注意这里有两个一模一样的网址,但前面一个的地址是详情不是我们想要的,因此在提取的时候我们需要提取后面一个

在这里插入图片描述

这里我们用两种方法:

#方法一
# data=re.findall('<td width="83" height="23">\s<a href="http://www.weather.com.cn/weather/(.*?).shtml" target="_blank">(.*?)</a></td>',response.text)
#方法二
data=re.findall('"23">\s<a.*weather/(.*?).s.*>(.*?)</a>',response.text)
for i in data :
    print(i)

在这里插入图片描述

导入csv模块写入excel,完整代码:

import csv
import re

import requests
from fake_user_agent import user_agent

with open('cityencodement.csv',mode='w',encoding='utf-8') as f:
    csv_writer=csv.writer(f)
    csv_writer.writerow(['city','编码'])
ua=user_agent()
headers={
    'Referer':'http://www.weather.com.cn/textFC/jiangxi.shtml',
    'User-Agent':ua
}
url='http://www.weather.com.cn/textFC/hb.shtml'
response=requests.get(url=url,headers=headers)
response.encoding='utf-8'
# print(response.text)
# data=re.findall('<td width="83" height="23">\s<a href="http://www.weather.com.cn/weather/(.*?).shtml" target="_blank">(.*?)</a></td>',response.text)

data=re.findall('"23">\s<a.*weather/(.*?).s.*>(.*?)</a>',response.text)
for i in data :
    city=i[1]
    encodement=i[0]
    with open('cityencodement.csv', mode='a', encoding='utf-8') as f:
        csv_writer = csv.writer(f)
        csv_writer.writerow([city,encodement])


这样就完成了

在这里插入图片描述

参考书籍:python网络爬虫从入门到实践

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值