正则表达式简单python爬取

python中正则表达式的一些基本点

例如要在一篇文档中寻找字符串he,则可以使用正则表达式he,它可以匹配出字符串he,如果忽略大小写的话还可以匹配出He、HE这样的字符串,这是最简单的正则表达式。但这种方式除了匹配出单独的he外还会匹配例如“hello”中的he。如果只想找出字符串he,可以使用元字符“\b”,它匹配单词的开始或结尾,即单词边界,因此可用“\bhe\b”匹配字符串he。再例如正则表达式“\d{1,3}”可以匹配包含1到3个数字字符的字符串如“11”和“222”。另外还可以利用括号(exp)指定子表达式exp(也称为分组),这样不仅可以重复单个字符也可以重复多个字符构成的子表达式并可返回。 正则表达式中有很多元字符,常用的元字符如下表所示:
在这里插入图片描述
特别的,当正则表达式中包含重复的限定符如“”时,通常会匹配尽可能多的字符,例如对于正则表达式“a.b”,它会匹配以a开头以b结尾的最长字符串,如果用它来搜索aabbab时,它会匹配整个字符串aabbab,这种方式称为贪婪匹配。如果想匹配尽可能少的字符,即进行懒惰匹配,则只要在“.”后加上“?”构成“.?”,例如用懒惰匹配来搜索aabbab时,会匹配aab和ab。
正则表达式常常比较复杂,所以可利用正则表达式在线测试/调试工具帮助正则表达式的书写。下图所示为著名的实现此功能的网站(https://regex101.com/),可设置忽略大小写(insensitive选项)等选项。

对豆瓣短评星级的爬取

# -*- coding: utf-8 -*-
"""
Spyder Editor

This is a temporary script file.
"""
import requests
from bs4 import BeautifulSoup
import re
kk = 0
r = requests.get("https://movie.douban.com/subject/3541415/comments")
soup = BeautifulSoup(r.text, 'lxml')
pattern = soup.find_all('span','short')
for item in pattern:
    print(item.string)
pattern_s = re.compile('<span class="allstar(.*?) rating"')#对正则表达式进行预编译,加快速度
p = re.findall(pattern_s,r.text)#找到刚才抓取的数据中符合正则表达式的部分
co=0
for star in p:
    kk+=int(star)
    co+=1
print(kk/co/10)

关于.*?

转自:https://blog.csdn.net/zth1002/article/details/44131165
最近要做一个提取文字特殊内容的工具,老是不会写正则表达,经常遇到.? 或 .+ 这些符号,网上查查,终于知道什么意思了,记录一下网上解释结果:

后边多一个?表示懒惰模式。
必须跟在或者+后边用
如:< img src=“test.jpg” width=“60px” height=“80px”/>
如果用正则匹配src中内容非懒惰模式匹配
src=".
"
匹配结果是:src=“test.jpg” width=“60px” height=“80px”
意思是从="往后匹配,直到最后一个"匹配结束

懒惰模式正则:
src=".*?"
结果:src=“test.jpg”
因为匹配到第一个"就结束了一次匹配。不会继续向后匹配。因为他懒惰嘛。

.表示除\n之外的任意字符
*表示匹配0-无穷
+表示匹配1-无穷

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值