大家好, 我是眼睛儿,从今天起,我会每天和大家分享一些学习爬虫相关的知识,.欢迎各位大佬的敦促和指导,也欢迎对爬虫感兴趣的小伙伴来交流,共同进步,废话不多说,上代码:
用python语言从繁多而复杂的数据中提取出有用的数据是相当繁琐的, 正则表达式为我们提供了一种简便的方法.想要做好爬虫, 第一步便是熟练使用正则表达式和re模块
正则表达式:
. ---- 匹配除换行符意外的任意字符
\w ----匹配任意数字,字母,下划线
\s ----匹配任意的空白符
\d ----匹配数字
\n ----匹配一个换行符
\t----匹配一个制表符
\b----匹配一个单词的结尾
^ ----匹配字符串的开始
&----匹配字符串的结尾
\W ----匹配任意非数字,字母,下划线
\D----匹配非数字
\S----匹配非空白符
a|b ----匹配字符a或字符b
()匹配括号内的表达式,也表示一个组
[...] ----匹配字符组中的字符
[^...] ---匹配除了字符中字符以外的任意字符
* 重复零次或多次
+ 出现一次或多次
? 重复一次或多次
{n} 出现n次
{n,m}出现n到m次
{n,}出现n次或跟多次
*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复
. 是任意字符
* 是取 0 至 无限长度
? 是非贪婪模式。
何在一起就是 取尽量少的任意字符,一般不会这么单独写,他大多用在:
.*?x
就是取前面任意长度的字符,直到一个x出现
利用re模块实现猫眼电影top100排名爬取
import requests
import re
def get_html(url,data):
ret = requests.get(url, params=data)
return ret.text
# re_before = re.compile(‘<dd>\s*.*\s*.*?title="(.*?)"‘)
# movies = re.finditer(movie_re, ret) #找出当前页面十个电影,得到一个可迭代对象
# movie_obj = next(movies).group() #通过next方法拿到第一个电影
# print(movie_obj)
#
# movie_name = re.findall(‘s="name".*?title="(.*?)"‘, movie_obj) #拿到第一个电影的电影名
# print(movie_name[0])
#
# movie_star = re.findall(‘s="star">\s*(.*?)\s*<‘, movie_obj) #拿到电影主演
# print(movie_star[0])
#
# movie_releasetime = re.search(‘s="releasetime">上映时间:(?P<time>.*?)<‘, movie_obj) #拿到电影时间
# print(movie_releasetime.group(‘time‘))
def get_info(html_res):
movie_re = re.compile(‘<dd>[\d\D]*?</dd>‘)
movies = re.finditer(movie_re, html_res)
for movie_obj in movies:
movie_obj = movie_obj.group()
movie_name = re.findall(‘s="name".*?title="(.*?)"‘, movie_obj)[0]
movie_star = re.findall(‘s="star">\s*(.*?)\s*<‘, movie_obj)[0]
movie_releasetime = re.search(‘s="releasetime">上映时间:(?P<time>.*?)<‘, movie_obj).group(‘time‘)
movieinfo = f‘电影名:{movie_name}, {movie_star}, 上映时间:{movie_releasetime}‘
print(movieinfo)
url = ‘https://maoyan.com/board/4‘
data = {
‘offset‘:0
}
for i in range(10):
data[‘offset‘] = i * 10
html_res = get_html(url, data)
get_info(html_res)
进击的爬虫-001-正则表达式实现猫眼电影top100排名爬取
原文:https://www.cnblogs.com/zhangjian0092/p/11215815.html