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到的数据

步骤

  1. 拿到页面源代码——>requests

  2. 通过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>.*?)&nbsp.*?<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>.*?)&nbsp.*?<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排行榜相关推荐

  1. python2.7抓取豆瓣电影top250

    利用python2.7抓取豆瓣电影top250 1.任务说明 抓取top100电影名称 依次打印输出 2.网页解析 要进行网络爬虫,利用工具(如浏览器)查看网页HTML文件的相关内容是很有必要,我使用 ...

  2. python爬取豆瓣电影top250并保存为xlsx_python抓取豆瓣电影Top250数据并写入Excel

    douban python抓取豆瓣电影Top250数据并写入Excel 1.将目标网站上的页面抓取下来 2.将抓取下来的数据根据一定的规则进行提取 create table `tb_movie`( i ...

  3. Python3 抓取豆瓣电影Top250

    利用 requests 抓取豆瓣电影 Top 250: import re import requestsdef main(url):global numheaders = {"User-A ...

  4. Python爬虫实战 | (3) 爬取豆瓣电影Top250

    在本篇博客中,我们将使用requests+正则表达式来爬取豆瓣电影TOP250电影榜单,获取每部电影的序号.片名.导演.编剧.主演.类型.制作国家/地区.语言.上映日期.片长.又名.豆瓣评分和剧情简介 ...

  5. Python网络爬虫:利用正则表达式爬取豆瓣电影top250排行前10页电影信息

    在学习了几个常用的爬取包方法后,转入爬取实战. 爬取豆瓣电影早已是练习爬取的常用方式了,网上各种代码也已经很多了,我可能现在还在做这个都太土了,不过没事,毕竟我也才刚入门-- 这次我还是利用正则表达式 ...

  6. python爬虫实例-运用requests抓取豆瓣电影TOP250(详解)

    目录 开发工具 目标 网页分析 正则匹配分析 代码实例 总结 开发工具 python版本: python-3.8.1-amd64 python开发工具: JetBrains PyCharm 2018. ...

  7. 爬虫脚本(抓取豆瓣电影Top250)

    运行环境:Windows7,python2.7.13 需求分析:爬取豆瓣电影网排行的Top250片名. 步骤: 1. 抓取网站源码. 2. 利用正则表达式提取片名. 3. 把电影片名保存到文本中. 4 ...

  8. python爬取豆瓣电影top250_Python 爬取豆瓣电影Top250排行榜,爬虫初试

    from bs4 import BeautifulSoup import openpyxl import re import urllib.request import urllib.error # ...

  9. php采集豆瓣评分,抓取豆瓣电影TOP250的PHP代码

    搜索热词 下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. for ($start = 0; $start < 250; $start ...

  10. 不会 Python 没关系,手把手教你用 web scraper 抓取豆瓣电影 top 250 和 b 站排行榜

    苏生不惑第190 篇原创文章,将本公众号设为 星标 ,第一时间看最新文章. 关于Python之前分享过很多文章了: Python 抓取知乎电影话题下万千网友推荐的电影,这个国庆节不愁没电影看了 王菲k ...

最新文章

  1. python在线工具-在线 Python运行工具
  2. oracle技术之检查点及SCN深入研究
  3. OpenCASCADE:可视化简介
  4. TCP协议-握手与挥手
  5. PyTorch官方教程中文版:Pytorch之图像篇
  6. 框架 go_Colly - 优雅极速的Go语言爬虫框架
  7. iOS NSNumber转化NSString之description
  8. 06 外键的三种分类
  9. 论文索引平台EI,SCI
  10. 李华上大学了吗?(I)
  11. 软件测试自学指南---从入门到精通V1.0
  12. 图像超分辨率:优化最近邻插值Super-Resolution by Predicting Offsets
  13. LocalDateTime查找最近的五分钟点
  14. C++深入浅出(八)—— 继承
  15. Dynamics CRM和企业微信集成(二)方案实现
  16. vue设置scrollTop不起作用
  17. 一起来乐邮邮——妙趣小软件:MailMail发布预告
  18. 【Java课程设计】基于Java Swing 的图书管理系统
  19. 二次优化问题dfp_BFGS和DFP法的最优化问题求解及在MATLAB中的实现
  20. ORACLE学习笔记-CentOS 7.5 Oracle 11gR2安装部署

热门文章

  1. 洛谷 P1548 [NOIP1997 普及组] 棋盘问题
  2. 【NLP】第16章 Transformer驱动副驾驶的出现
  3. 计算机监控系统sacad,太阳能热泵多功能复合机(sahpm)计算机监控系统实现方法研究-机械电子工程专业论文.docx...
  4. 开博客,立决心,学oracle,做DBA!
  5. 懒羊羊的作业:看过国产动画片的同学都知道,懒羊羊是一只非常懒的羊,整天除了吃就是睡,根本没有时间做作业。明天就是周一了,村长慢羊羊留的作业:把 n 个整数从大到小排序,它还没开始写...
  6. 计算机动漫与游戏制作要画画基础吗,动漫制作要有绘画基础吗
  7. Docker - 常见操作命令篇
  8. 删除电脑中删不掉的文件或文件夹
  9. ubuntu安装firefox flash插件
  10. Web基础(从零开始)——HTML文本域(textarea标签)