简介: 这是一个很简单的获取豆瓣网文本内容的爬虫,涉及到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>.*?)&nbsp' # 上映年份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>.*?)&nbsp' # 上映年份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>.*?)&nbsp' # 上映年份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,看看都有哪些电影上榜相关推荐

  1. requests 获取div_爬虫系列第五篇 使用requests与BeautifulSoup爬取豆瓣图书Top250

    上一篇我们学习了BeautifulSoup的基本用法,本节我们使用它来爬取豆瓣图书Top250. 一.网页分析 我们爬取的网页的url是https://book.douban.com/top250?i ...

  2. 爬虫系列1:Requests+Xpath 爬取豆瓣电影TOP

    爬虫1:Requests+Xpath 爬取豆瓣电影TOP [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]: ...

  3. 利用Requests库和正则表达式爬取豆瓣影评Top250

    说明 最近看了下爬虫基础,想写个博客来记录一下,一来是可以方便和我一样刚入门的小白来参考学习,二来也当做自己的笔记供自己以后查阅. 本文章是利用python3.6和Requests库(需自行安装,cm ...

  4. Python爬虫小白教程(二)—— 爬取豆瓣评分TOP250电影

    文章目录 前言 安装bs4库 网站分析 获取页面 爬取页面 页面分析 其他页面 爬虫系列 前言 经过上篇博客Python爬虫小白教程(一)-- 静态网页抓取后我们已经知道如何抓取一个静态的页面了,现在 ...

  5. 使用Requests和Lxml库,爬取豆瓣读书TOP250

    from lxml import etree import requests import csv #导入需要的库fp = open('C://Users/Administrator/Desktop/ ...

  6. Requests+Xpath 爬取豆瓣读书TOP并生成txt,csv,json,excel文件

    说明: ##来源:https://www.cnblogs.com/yizhiamumu/p/10270926.html 1 Requests+Xpath 爬取豆瓣读书TOP ''' Requests+ ...

  7. 使用Xpath语法爬取豆瓣读书Top250

    使用Xpath语法爬取豆瓣读书Top250(csv存取数据) 使用的软件是Spyder 网页地址:https://book.douban.com/top250?start=0 直接上代码: 建议大家从 ...

  8. 爬虫项目实操三、用scrapy框架爬取豆瓣读书Top250的书名,出版信息和评分

    安装方法:Windows:在终端输入命令:pip install scrapy:mac:在终端输入命令:pip3 install scrapy,按下enter键,再输入cd Python,就能跳转到P ...

  9. python爬取豆瓣读书top250并保存xls(含源码)

    python爬取豆瓣读书top250并保存xls(含源码) 又是霍霍豆瓣的一天O(∩_∩)O哈哈~. 目标网站:http://book.douban.com/top250/ 全军出击!!! 首先,按下 ...

  10. python爬取豆瓣读书top250

    python爬取豆瓣读书top250,并保存在本地. 分别用requests+re.requests+xpath 完成 1.requests + re import requests import r ...

最新文章

  1. shell脚本实例-判断主机存活 以及企业备份方案
  2. linux打开u盘里的文件,Linux下U盘内容为只读文件不能存储其他内容的解决办法
  3. 分布式一致性算法:Raft 算法
  4. mssql php 5.4,PHP5.4如何连接MSSql Server2005
  5. 洛谷 P1404 平均数
  6. 数学建模-4.拟合算法
  7. 专家从美国联邦政府机构网络上发现后门
  8. 虚拟服务器 vmotion,图文并茂:深入了解VMware vMotion过程
  9. hibernate的HQL查询部分属性
  10. 【优化算法】蛾群优化算法(MSA)【含Matlab源码 1807期】
  11. 20165320 我期望的师生关系
  12. 高德地图集成之基础定位
  13. adb shell dumpsys window
  14. boost斩波电路控制系统C语言,Boost升压斩波电路[精华]
  15. 创维电视显示无服务器,常见创维电视机故障及维修方法【详解】
  16. 坐在家中点击鼠标,万里之外ATM吐钞……
  17. 洛谷 P1456 Monkey King 题解
  18. 一些提取api key的正则表达式
  19. android联系人的简易通讯录
  20. 解决ImageIo图像类型不支持的异常:Unsupported Image Type

热门文章

  1. sharepoint 2016 学习系列篇(19)-文档库应用篇-(1)创建一个文档库
  2. ABAP--ABAP程序员需要参加的课程
  3. 统计学试题计算机,统计学试题库(含答案)
  4. Flutter 轮子:视频广告倒计时页面
  5. 华为android10手机指纹,华为手机如何设置指纹解锁?华为手机锁屏密码设置教程...
  6. Typecho主题Nexmoe/两栏个性唯美Typecho主题
  7. 50岁的哆啦A梦撞上63岁的卡西欧,数据中台告诉你火花有多大
  8. 跨服务器备份文件,服务器异地数据备份方案,常见的几种异地数据备份方法
  9. C# 爬取 在线时间 设置 Windows系统时间
  10. 生成随机密码(包含字母、数字、特殊字符)