Python利用re正则表达式抓取豆瓣电影Top250排行榜
Python利用re正则表达式抓取豆瓣电影Top250排行榜
利用request和re来抓取电影排行榜的电影名称,电影年份,电影评分以及评价人数并写为.csv格式文件
先来介绍一下re模块中的几个简单常用的方法
re模块
几个简单功能
1. findall
# findall :匹配字符串中所有符合正则的内容
import re
result = re.findall(r"\d+", "你好我的电话是123456,他的电话是654321")
print(result)
>>>['123456', '654321']
2. finditer
# finditer :匹配字符串中所有的内容(返回迭代器)
result2 = re.finditer(r"\d+", "你好我的电话是123456,他的电话是654321")
for i in result2:#从迭代器中取数据print(i)
>>><re.Match object; span=(7, 13), match='123456'>
>>><re.Match object; span=(19, 25), match='654321'>
for i in result2:#从迭代器中取数据print(i.group()) #使用group()方法直接输出match到的数据
>>>123456
>>>654321
3.search
#search 只要找到一个结果就返回match对象,需要使用group()方法取数据
result3 = re.search(r"\d+", "你好我的电话是123456,他的电话是654321")
print(result3.group())
>>>123456
print(result3.group())
>>>123456#不会继续往后找
4.match
#match 从头开始匹配,相当于默认在正则表达式前面加了"^"
result3 = re.match(r"\d+", "你好我的电话是123456,他的电话是654321")
print(result3.group()) #报错,数据为空
5.预加载正则表达式
在需要多次使用正则表达式时,为了提高执行效率,可以对正则表达式进行预加载。
#预加载正则表达式
obj = re.compile(r"正则表达式")
#使用方式
result = obj.finditer("你好我的电话是123456,他的电话是654321")
for i in result2:#从迭代器中取数据print(i.group()) #使用group()方法直接输出match到的数据
步骤
拿到页面源代码——>requests
通过re以及正则来提取有效信息——>re
代码
import requests #导入请求包
import re #正则url = "https://movie.douban.com/top250"
#添加User-Agent
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"}
resp = requests.get(url, headers=headers) #获取响应数据
page_content = resp.text #提取源代码#解析数据
obj = re.compile(r'<li>.*?<div class="item">.*?<span class="title">(?P<name>.*?)</span>.*?<p class="">.*?<br>.*?(?P<year>.*?) .*?<span class="rating_num" property="v:average">(?P<score>.*?)</span>.*?<span>(?P<people>.*?)人评价</span>', re.S) #书写正则表达式(关键在于寻找定位标签)
result = obj.finditer(page_content)#利用正则来提取数据,将电影名称存放在name组,年份存在year组,评分存在score组,评价人数存在people组(返回迭代器)
for i in result:print(i.group("name"))print(i.group("year").strip())#去除year的多余空格print(i.group("score"))print(i.group("people"))
print("Over!")
改进
上面的例子我们抓取到了该页面上的数据,但是无法获得下一页的数据。在对下一页的网页地址观察发现,页数的跳转其实就url中某个参数的变化,而且是有规律的变化,以本例来看,第二页的网址为“https://movie.douban.com/top250?start=25&filter=”,第三页的网址为“https://movie.douban.com/top250?start=50&filter=”.就是start=后面的参数发生变化,而且每跳转一页,参数加25.
随后我们可以将参数设为一个变量,并且在抓取完每一个页面后值叠加25,跳转到下一页。接下来以抓取10页为例,并将数据写为.csv格式文件
import requests #导入请求包
import re #正则
import csv #导入scv模块用于数据读写index = 0 #页面跳转参数
f = open("data.csv", mode="a", newline='') #新建并打开名为data.csv的文件用于写入数据
while index <= 250: #将页面限定为前十页url = f"https://movie.douban.com/top250?start={index}&filter=" #将页面按数据拼接到url中#添加User-Agentheaders = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"}resp = requests.get(url, headers=headers) #获取响应page_content = resp.text #提取源代码obj = re.compile(r'<li>.*?<div class="item">.*?<span class="title">(?P<name>.*?)'r'</span>.*?<p class="">.*?<br>.*?(?P<year>.*?) .*?<span class="rating_num" property="v:average"'r'>(?P<score>.*?)</span>.*?<span>(?P<people>.*?)人评价</span>', re.S) #书写正则表达式(关键在于寻找定位标签) result = obj.finditer(page_content)#利用正则来提取数据,将电影名称存放在name组,年份存在year组,评分存在score组,评价人数存在people组(返回迭代器)csvwriter = csv.writer(f) for i in result: dic = i.groupdict() #将result中的数据转为字典格式dic['year'] = dic['year'].strip() #去除year的多余空格csvwriter.writerow(dic.values()) #数据写入index = index + 25 #参数值叠加,实现页面跳转print(f"over!{index/25}")
f.close()
效果:
完成!
Python利用re正则表达式抓取豆瓣电影Top250排行榜相关推荐
- python2.7抓取豆瓣电影top250
利用python2.7抓取豆瓣电影top250 1.任务说明 抓取top100电影名称 依次打印输出 2.网页解析 要进行网络爬虫,利用工具(如浏览器)查看网页HTML文件的相关内容是很有必要,我使用 ...
- python爬取豆瓣电影top250并保存为xlsx_python抓取豆瓣电影Top250数据并写入Excel
douban python抓取豆瓣电影Top250数据并写入Excel 1.将目标网站上的页面抓取下来 2.将抓取下来的数据根据一定的规则进行提取 create table `tb_movie`( i ...
- Python3 抓取豆瓣电影Top250
利用 requests 抓取豆瓣电影 Top 250: import re import requestsdef main(url):global numheaders = {"User-A ...
- Python爬虫实战 | (3) 爬取豆瓣电影Top250
在本篇博客中,我们将使用requests+正则表达式来爬取豆瓣电影TOP250电影榜单,获取每部电影的序号.片名.导演.编剧.主演.类型.制作国家/地区.语言.上映日期.片长.又名.豆瓣评分和剧情简介 ...
- Python网络爬虫:利用正则表达式爬取豆瓣电影top250排行前10页电影信息
在学习了几个常用的爬取包方法后,转入爬取实战. 爬取豆瓣电影早已是练习爬取的常用方式了,网上各种代码也已经很多了,我可能现在还在做这个都太土了,不过没事,毕竟我也才刚入门-- 这次我还是利用正则表达式 ...
- python爬虫实例-运用requests抓取豆瓣电影TOP250(详解)
目录 开发工具 目标 网页分析 正则匹配分析 代码实例 总结 开发工具 python版本: python-3.8.1-amd64 python开发工具: JetBrains PyCharm 2018. ...
- 爬虫脚本(抓取豆瓣电影Top250)
运行环境:Windows7,python2.7.13 需求分析:爬取豆瓣电影网排行的Top250片名. 步骤: 1. 抓取网站源码. 2. 利用正则表达式提取片名. 3. 把电影片名保存到文本中. 4 ...
- python爬取豆瓣电影top250_Python 爬取豆瓣电影Top250排行榜,爬虫初试
from bs4 import BeautifulSoup import openpyxl import re import urllib.request import urllib.error # ...
- php采集豆瓣评分,抓取豆瓣电影TOP250的PHP代码
搜索热词 下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. for ($start = 0; $start < 250; $start ...
- 不会 Python 没关系,手把手教你用 web scraper 抓取豆瓣电影 top 250 和 b 站排行榜
苏生不惑第190 篇原创文章,将本公众号设为 星标 ,第一时间看最新文章. 关于Python之前分享过很多文章了: Python 抓取知乎电影话题下万千网友推荐的电影,这个国庆节不愁没电影看了 王菲k ...
最新文章
- python在线工具-在线 Python运行工具
- oracle技术之检查点及SCN深入研究
- OpenCASCADE:可视化简介
- TCP协议-握手与挥手
- PyTorch官方教程中文版:Pytorch之图像篇
- 框架 go_Colly - 优雅极速的Go语言爬虫框架
- iOS NSNumber转化NSString之description
- 06 外键的三种分类
- 论文索引平台EI,SCI
- 李华上大学了吗?(I)
- 软件测试自学指南---从入门到精通V1.0
- 图像超分辨率:优化最近邻插值Super-Resolution by Predicting Offsets
- LocalDateTime查找最近的五分钟点
- C++深入浅出(八)—— 继承
- Dynamics CRM和企业微信集成(二)方案实现
- vue设置scrollTop不起作用
- 一起来乐邮邮——妙趣小软件:MailMail发布预告
- 【Java课程设计】基于Java Swing 的图书管理系统
- 二次优化问题dfp_BFGS和DFP法的最优化问题求解及在MATLAB中的实现
- ORACLE学习笔记-CentOS 7.5 Oracle 11gR2安装部署
热门文章
- 洛谷 P1548 [NOIP1997 普及组] 棋盘问题
- 【NLP】第16章 Transformer驱动副驾驶的出现
- 计算机监控系统sacad,太阳能热泵多功能复合机(sahpm)计算机监控系统实现方法研究-机械电子工程专业论文.docx...
- 开博客,立决心,学oracle,做DBA!
- 懒羊羊的作业:看过国产动画片的同学都知道,懒羊羊是一只非常懒的羊,整天除了吃就是睡,根本没有时间做作业。明天就是周一了,村长慢羊羊留的作业:把 n 个整数从大到小排序,它还没开始写...
- 计算机动漫与游戏制作要画画基础吗,动漫制作要有绘画基础吗
- Docker - 常见操作命令篇
- 删除电脑中删不掉的文件或文件夹
- ubuntu安装firefox flash插件
- Web基础(从零开始)——HTML文本域(textarea标签)