300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > python爬虫(二)数据解析 re正则表达式解析

python爬虫(二)数据解析 re正则表达式解析

时间:2023-03-12 00:04:38

相关推荐

python爬虫(二)数据解析 re正则表达式解析

目录

1 正则表达式学习的网站2 re 模块3 爬取

1 正则表达式学习的网站

在开源中国网站里面,就有这个正则表达式的工具

/

2 re 模块

findall()

找出所有满足条件的,返回的是一个列表。

import relist4 = re.findall(r"\d+", "10111,ddd8888")print(list4)

finditer()

迭代器的方式匹配

list3 = re.finditer(r"\d+", "10111,ddd8888")for i in list3:print(i.group())

search:

在字符串中找满足条件的字符。如果找到,就返回。说白了,就是只会找到第一个满足条件的。

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 = "abc\nabc"ret = re.match('abc.*abc',text,re.DOTALL)print(ret.group())

compile()

对于一些经常要用到的正则表达式,可以使用compile进行编译,后期再使用的时候可以直接拿过来用,执行效率会更快。而且compile还可以指定flag=re.VERBOSE,在写正则表达式的时候可以做好注释。示例代码如下:

text = "the number is 20.50"r = pile(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、能够承担公司前端培训工作,对公司各业务线的前端(HTML5\CSS3)工作进行支撑和指导。</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 爬取

import csvimport reimport requests# 请求的网站url = "/top250"# 重新封装参数param ={}# 设置headerheaders={# 从浏览器获取'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 = pile(r'<li>.*?<div class="item">.*?<span class="title">(?P<name>.*?)'r'</span>.*?<p class="">.*?<br>(?P<year>.*?)&nbsp.*?<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()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。