目录
- 1 正则表达式学习的网站
- 2 re 模块
- 3 爬取
1 正则表达式学习的网站
在开源中国网站里面,就有这个正则表达式的工具
代码语言:javascript复制https://www.oschina.net/
2 re 模块
- findall() 找出所有满足条件的,返回的是一个列表。
import re
list4 = re.findall(r"d ", "10111,ddd8888")
print(list4)
- finditer() 迭代器的方式匹配
list3 = re.finditer(r"d ", "10111,ddd8888")
for i in list3:
print(i.group())
- search:
在字符串中找满足条件的字符。如果找到,就返回。说白了,就是只会找到第一个满足条件的。
代码语言:javascript复制text = 'apple price $99 orange price $88'
ret = re.search('d ',text)
print(ret.group())
- match() 从开始的位置进行匹配。如果开始的位置没有匹配到。就直接失败了。示例代码如下:
text = 'hello'
ret = re.match('h',text)
print(ret.group())
如果第一个字母不是h
,那么就会失败。示例代码如下:
text = 'ahello'
ret = re.match('h',text)
print(ret.group())
如果想要匹配换行的数据,那么就要传入一个flag=re.DOTALL
,就可以匹配换行符了。示例代码如下:
text = "abcnabc"
ret = re.match('abc.*abc',text,re.DOTALL)
print(ret.group())
- compile()
对于一些经常要用到的正则表达式,可以使用
compile
进行编译,后期再使用的时候可以直接拿过来用,执行效率会更快。而且compile
还可以指定flag=re.VERBOSE
,在写正则表达式的时候可以做好注释。示例代码如下:
text = "the number is 20.50"
r = re.compile(r"""
d # 小数点前面的数字
.? # 小数点
d* # 小数点后面的数字
""",re.VERBOSE)
ret = re.search(r,text)
print(ret.group())
- sub: 用来替换字符串。将匹配到的字符串替换为其他字符串。
html = """
<div>
<p>基本要求:</p>
<p>1、精通HTML5、CSS3、 JavaScript等Web前端开发技术,对html5页面适配充分了解,熟悉不同浏览器间的差异,熟练写出兼容各种浏览器的代码;</p>
<p>2、熟悉运用常见JS开发框架,如JQuery、vue、angular,能快速高效实现各种交互效果;</p>
<p>3、熟悉编写能够自动适应HTML5界面,能让网页格式自动适应各款各大小的手机;</p>
<p>4、利用HTML5相关技术开发移动平台、PC终端的前端页面,实现HTML5模板化;</p>
<p>5、熟悉手机端和PC端web实现的差异,有移动平台web前端开发经验,了解移动互联网产品和行业,有在Android,iOS等平台下HTML5 CSS JavaScript(或移动JS框架)开发经验者优先考虑;6、良好的沟通能力和团队协作精神,对移动互联网行业有浓厚兴趣,有较强的研究能力和学习能力;</p>
<p>7、能够承担公司前端培训工作,对公司各业务线的前端(HTML5CSS3)工作进行支撑和指导。</p>
<p><br></p>
<p>岗位职责:</p>
<p>1、利用html5及相关技术开发移动平台、微信、APP等前端页面,各类交互的实现;</p>
<p>2、持续的优化前端体验和页面响应速度,并保证兼容性和执行效率;</p>
<p>3、根据产品需求,分析并给出最优的页面前端结构解决方案;</p>
<p>4、协助后台及客户端开发人员完成功能开发和调试;</p>
<p>5、移动端主流浏览器的适配、移动端界面自适应研发。</p>
</div>
"""
ret = re.sub('</?[a-zA-Z0-9] >',"",html)
print(ret)
3 爬取
代码语言:javascript复制import csv
import re
import requests
# 请求的网站
url = "https://movie.douban.com/top250"
# 重新封装参数
param ={
}
# 设置header
headers={
# 从浏览器获取
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}
# 发送请求
resp = requests.get(url=url,params=param,headers=headers)
page_content = resp.text
# print(page_content)
# 定义解析数据的正则表达式
obj = re.compile(r'<li>.*?<div class="item">.*?<span class="title">(?P<name>.*?)'
r'</span>.*?<p class="">.*?<br>(?P<year>.*?) .*?<span '
r'class="rating_num" property="v:average">(?P<score>.*?)</span>.*?'
r'<span>(?P<num>.*?)人评价</span>',re.S
)
# 开始匹配
result = obj.finditer(page_content)
f = open("data.csv",mode="w")
csvwriter = csv.writer(f)
for i in result:
# print(i.group("name") )
# print(i.group("name") "---" i.group("year").strip() "---" i.group("score") "---" i.group("num"))
dic = i.groupdict()
dic['year'] = dic['year'].strip()
csvwriter.writerow(dic.values())
print("over")
# 关闭请求
f.close()
resp.close()