python爬虫(一) 正则表达式
来源:互联网 发布:javascript return; 编辑:程序博客网 时间:2024/06/03 02:26
先上实例吧
如我想在字符串“dsaasdasdqwe33423weasdasdasds”中找出数字部分
import reString='dsaasdasdqwe33423weasdasdasds'key=r'[0-9]+'f_a=re.compile(key)f_all=f_a.findall(String)for i in f_all:print(i)
运行结果:
注意:这里 import re 导入python的正则库 如果import re 出错 应去cmd回车 输入pip install re
这里不多讲re的用法 它有findall还有其它
这里的key=r'[0-9]+' 就是今天的主角 正则表达式
在正则表达式中,如果直接给出字符,就是精确匹配。用\d
可以匹配一个数字,\w
可以匹配一个字母或数字,所以:
'00\d'
可以匹配'007'
,但无法匹配'00A'
;'\d\d\d'
可以匹配'010'
;'\w\w\d'
可以匹配'py3'
;
.
可以匹配任意字符,所以:
'py.'
可以匹配'pyc'
、'pyo'
、'py!'
等等。
要匹配变长的字符,在正则表达式中,用*
表示任意个字符(包括0个),用+
表示至少一个字符,用?
表示0个或1个字符,用{n}
表示n个字符,用{n,m}
表示n-m个字符:
来看一个复杂的例子:\d{3}\s+\d{3,8}
。
我们来从左到右解读一下:
\d{3}
表示匹配3个数字,例如'010'
;\s
可以匹配一个空格(也包括Tab等空白符),所以\s+
表示至少有一个空格,例如匹配' '
,' '
等;\d{3,8}
表示3-8个数字,例如'1234567'
。
综合起来,上面的正则表达式可以匹配以任意个空格隔开的带区号的电话号码。
如果要匹配'010-12345'
这样的号码呢?由于'-'
是特殊字符,在正则表达式中,要用'\'
转义,所以,上面的正则是\d{3}\-\d{3,8}
。
但是,仍然无法匹配'010 - 12345'
,因为带有空格。所以我们需要更复杂的匹配方式。
进阶
要做更精确地匹配,可以用[]
表示范围,比如:
[0-9a-zA-Z\_]
可以匹配一个数字、字母或者下划线;[0-9a-zA-Z\_]+
可以匹配至少由一个数字、字母或者下划线组成的字符串,比如'a100'
,'0_Z'
,'Py3000'
等等;[a-zA-Z\_][0-9a-zA-Z\_]*
可以匹配由字母或下划线开头,后接任意个由一个数字、字母或者下划线组成的字符串,也就是Python合法的变量;[a-zA-Z\_][0-9a-zA-Z\_]{0, 19}
更精确地限制了变量的长度是1-20个字符(前面1个字符+后面最多19个字符)。
A|B
可以匹配A或B,所以(P|p)ython
可以匹配'Python'
或者'python'
。
^
表示行的开头,^\d
表示必须以数字开头。
$
表示行的结束,\d$
表示必须以数字结束。
你可能注意到了,py
也可以匹配'python'
,但是加上^py$
就变成了整行匹配,就只能匹配'py'
了。
这里写了一个爬虫实例,爬虫基本都要用到正则表达式,有兴趣的可以运行一下:
import reimport timeimport requestsimport urllib.requestfrom bs4 import BeautifulSoupfrom urllib.error import HTTPErrordef save(keyurl,y):if keyurl==None:print('keyurl==None!')else:x=1+y*100for i in keyurl:try:# time.sleep(3)print(i)time.sleep(2)urllib.request.urlretrieve(i,'%s.jpg'%x)print(x,'saving...')x=x+1except HTTPError as e:print('读取错误!',e)# return Noneprint('saved')y=9for x in range(1,211):# url='http://www.meizitu.com/a/list_1_%s.html'%xurl='http://www.mzitu.com/share/comment-page-%s'%xheader={'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36'}print(url)html=requests.get(url,headers=header)html=html.textp_key=re.compile(r'src="(http://ww.*?\.jpg)')namlist=p_key.findall(html)print(namlist)y=y+1time.sleep(3)save(namlist,y)
- python爬虫(一) 正则表达式
- Python爬虫入门一之正则表达式
- Python爬虫 正则表达式
- Python爬虫-正则表达式
- python爬虫-正则表达式
- Python爬虫入门(7):正则表达式
- Python爬虫入门(7):正则表达式
- Python爬虫基础-5(正则表达式)
- Python网络爬虫(3)正则表达式
- Python爬虫四(正则表达式)
- Python爬虫入门(7):正则表达式
- Python爬虫学习(四)正则表达式
- python爬虫基础知识(二)--正则表达式
- python爬虫之正则表达式学习笔记一
- Python正则表达式(一)
- Python正则表达式(一)
- Python正则表达式(一)
- Python:正则表达式(一)
- 简易内存池
- mybatis(二)---关联表查询
- CSS-选择器及其兼容性
- Knapsack problem (FZU_2214,福建省第六届ACM-problemC) 01背包+初始化问题+渐缩问题
- html基本标签
- python爬虫(一) 正则表达式
- hdu1495 非常可乐 (广搜)
- 操作系统学习笔记(三)
- ASP .NET MVC入门
- 进程退出、僵尸进程、孤儿进程
- 图论模板
- HDU 1272 小希的迷宫
- 定时器被阻隔的处理方法
- 动态规划练习--02(最大子矩阵)