requests+re-爬取豆瓣电影top250,看看都有哪些电影上榜
简介: 这是一个很简单的获取豆瓣网文本内容的爬虫,涉及到requests模块get方法的使用,正则表达式re模块的对数据进行抽取,得到我们关注的内容(电影名,影片上映时间,评分,评论人数),最后保存到csv文件中
前期准备
python模块: re模块,requests模块,csv模块
豆瓣电影top250地址:https://movie.douban.com/top250
请求数据
1、使用requests模块的get()方法获取网页源码。
# 请求头
import requests
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"}
#resp接收get请求响应的数据
resp=requests.get("https://movie.douban.com/top250",headers=headers)#text查看响应的内容
print(resp.text)
resp.close()
使用requests获取的网页源码(开头)
网页开发者模式看到的源码(开头)
注意:
为什么get()需要headers参数:模拟网站的正常访问,绕开反爬机制
headers如何找到:F12,开发者工具。requests下
resp.close():关闭你的请求,如果你不关掉你的请求,时间长了或者多次执行代码后就会限制访问这个网页(亲测)
数据处理
2、使用正则表达式,对筛选我们需要的内容
#预加载
import requests
import re
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"}
reStr=re.compile(r'<li>.*?<em class="">(?P<topnum>.*?)</em>.*?' # top榜排名r'<span class="title">(?P<name>.*?)</span>.*?' # 电影名r'.*?<br>(?P<year>.*?) ' # 上映年份r'.*?<span class="rating_num" property="v:average">(?P<score>.*?)</span>.*?<span>(?P<nums>.*?)人评价</span>' # 评论人数,re.S)
resp=requests.get("https://movie.douban.com/top250",headers=headers)
obj=resp.text
res = reStr.finditer(obj) # finditer匹配整个语句,并返回一个迭代器
for i in res:print(i.group('topnum')) # 打印我们需要的分组print(i.group('name'))print(i.group('year').strip()) # strip处理空格print(i.group('score'))print(i.group('nums'))
resp.close()
运行截图(我们获取了一个页面的内容,共25条数据):
完整的250条数据:
通过分析网址发现仅start的参数有变化:
(第一页)https://movie.douban.com/top250?start=&filter=
(第二页)https://movie.douban.com/top250?start=25&filter=
所以我们通过循环遍历的方式,去改变url,达到获取整个top榜的数据
import requests
import re
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"}
reStr=re.compile(r'<li>.*?<em class="">(?P<topnum>.*?)</em>.*?' # top榜排名r'<span class="title">(?P<name>.*?)</span>.*?' # 电影名r'.*?<br>(?P<year>.*?) ' # 上映年份r'.*?<span class="rating_num" property="v:average">(?P<score>.*?)</span>.*?<span>(?P<nums>.*?)人评价</span>' # 评论人数,re.S)# 新增的for循环遍历改变网址
for it in range(0,250,25):url = "https://movie.douban.com/top250?start={}".format(it)# 未改变resp=requests.get(url,headers=headers)obj=resp.textres = reStr.finditer(obj) # finditer匹配整个语句,并返回一个迭代器for i in res:print(i.group('topnum'),end=" ")print(i.group('name'),end=" ")print(i.group('year').strip(),end=" ")print(i.group('score'),end=" ")print(i.group('nums'))
resp.close()
运行截图(部分)
保存数据
3、把内容保存到csv文件中
import csv# 新建文件,不使用encoding,windows用户保存的文件容易出现乱码的情况
f=open("topdata.csv",mode="w",encoding="utf-8")
csvwriter=csv.writer(f)for it in range(0,250,25):url = "https://movie.douban.com/top250?start={}".format(it)resp=requests.get(url,headers=headers)obj=resp.textres = reStr.finditer(obj) # finditer匹配整个语句,并返回一个迭代器Ffor i in res:# print(i.group('topnum'),end=" ")# print(i.group('name'),end=" ")# print(i.group('year').strip(),end=" ")# print(i.group('score'),end=" ")# print(i.group('nums'))#遍历写入数据dict = i.groupdict()dict['year'] = dict['year'].strip()csvwriter.writerow(dict.values())
成功保存截图:
完整代码:
import requests
import re
import csv
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"}
reStr=re.compile(r'<li>.*?<em class="">(?P<topnum>.*?)</em>.*?' # top榜排名r'<span class="title">(?P<name>.*?)</span>.*?' # 电影名r'.*?<br>(?P<year>.*?) ' # 上映年份r'.*?<span class="rating_num" property="v:average">(?P<score>.*?)</span>.*?<span>(?P<nums>.*?)人评价</span>' # 评论人数,re.S)
# 新建文件,不使用encoding,windows用户保存的文件容易出现乱码的情况
f=open("topdata.csv",mode="w",encoding="utf-8")
csvwriter=csv.writer(f)for it in range(0,250,25):url = "https://movie.douban.com/top250?start={}".format(it)resp=requests.get(url,headers=headers)obj=resp.textres = reStr.finditer(obj) # finditer匹配整个语句,并返回一个迭代器Ffor i in res:# print(i.group('topnum'),end=" ")# print(i.group('name'),end=" ")# print(i.group('year').strip(),end=" ")# print(i.group('score'),end=" ")# print(i.group('nums'))#遍历写入数据dict = i.groupdict()dict['year'] = dict['year'].strip()csvwriter.writerow(dict.values())
resp.close()
# 操作完文件后就关闭,养成好习惯
f.close()
print("over")
这就是一个完整的简单的爬虫实例,可以去试一试了!
requests+re-爬取豆瓣电影top250,看看都有哪些电影上榜相关推荐
- requests 获取div_爬虫系列第五篇 使用requests与BeautifulSoup爬取豆瓣图书Top250
上一篇我们学习了BeautifulSoup的基本用法,本节我们使用它来爬取豆瓣图书Top250. 一.网页分析 我们爬取的网页的url是https://book.douban.com/top250?i ...
- 爬虫系列1:Requests+Xpath 爬取豆瓣电影TOP
爬虫1:Requests+Xpath 爬取豆瓣电影TOP [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]: ...
- 利用Requests库和正则表达式爬取豆瓣影评Top250
说明 最近看了下爬虫基础,想写个博客来记录一下,一来是可以方便和我一样刚入门的小白来参考学习,二来也当做自己的笔记供自己以后查阅. 本文章是利用python3.6和Requests库(需自行安装,cm ...
- Python爬虫小白教程(二)—— 爬取豆瓣评分TOP250电影
文章目录 前言 安装bs4库 网站分析 获取页面 爬取页面 页面分析 其他页面 爬虫系列 前言 经过上篇博客Python爬虫小白教程(一)-- 静态网页抓取后我们已经知道如何抓取一个静态的页面了,现在 ...
- 使用Requests和Lxml库,爬取豆瓣读书TOP250
from lxml import etree import requests import csv #导入需要的库fp = open('C://Users/Administrator/Desktop/ ...
- Requests+Xpath 爬取豆瓣读书TOP并生成txt,csv,json,excel文件
说明: ##来源:https://www.cnblogs.com/yizhiamumu/p/10270926.html 1 Requests+Xpath 爬取豆瓣读书TOP ''' Requests+ ...
- 使用Xpath语法爬取豆瓣读书Top250
使用Xpath语法爬取豆瓣读书Top250(csv存取数据) 使用的软件是Spyder 网页地址:https://book.douban.com/top250?start=0 直接上代码: 建议大家从 ...
- 爬虫项目实操三、用scrapy框架爬取豆瓣读书Top250的书名,出版信息和评分
安装方法:Windows:在终端输入命令:pip install scrapy:mac:在终端输入命令:pip3 install scrapy,按下enter键,再输入cd Python,就能跳转到P ...
- python爬取豆瓣读书top250并保存xls(含源码)
python爬取豆瓣读书top250并保存xls(含源码) 又是霍霍豆瓣的一天O(∩_∩)O哈哈~. 目标网站:http://book.douban.com/top250/ 全军出击!!! 首先,按下 ...
- python爬取豆瓣读书top250
python爬取豆瓣读书top250,并保存在本地. 分别用requests+re.requests+xpath 完成 1.requests + re import requests import r ...
最新文章
- shell脚本实例-判断主机存活 以及企业备份方案
- linux打开u盘里的文件,Linux下U盘内容为只读文件不能存储其他内容的解决办法
- 分布式一致性算法:Raft 算法
- mssql php 5.4,PHP5.4如何连接MSSql Server2005
- 洛谷 P1404 平均数
- 数学建模-4.拟合算法
- 专家从美国联邦政府机构网络上发现后门
- 虚拟服务器 vmotion,图文并茂:深入了解VMware vMotion过程
- hibernate的HQL查询部分属性
- 【优化算法】蛾群优化算法(MSA)【含Matlab源码 1807期】
- 20165320 我期望的师生关系
- 高德地图集成之基础定位
- adb shell dumpsys window
- boost斩波电路控制系统C语言,Boost升压斩波电路[精华]
- 创维电视显示无服务器,常见创维电视机故障及维修方法【详解】
- 坐在家中点击鼠标,万里之外ATM吐钞……
- 洛谷 P1456 Monkey King 题解
- 一些提取api key的正则表达式
- android联系人的简易通讯录
- 解决ImageIo图像类型不支持的异常:Unsupported Image Type
热门文章
- sharepoint 2016 学习系列篇(19)-文档库应用篇-(1)创建一个文档库
- ABAP--ABAP程序员需要参加的课程
- 统计学试题计算机,统计学试题库(含答案)
- Flutter 轮子:视频广告倒计时页面
- 华为android10手机指纹,华为手机如何设置指纹解锁?华为手机锁屏密码设置教程...
- Typecho主题Nexmoe/两栏个性唯美Typecho主题
- 50岁的哆啦A梦撞上63岁的卡西欧,数据中台告诉你火花有多大
- 跨服务器备份文件,服务器异地数据备份方案,常见的几种异地数据备份方法
- C# 爬取 在线时间 设置 Windows系统时间
- 生成随机密码(包含字母、数字、特殊字符)