python爬虫实例-运用requests抓取豆瓣电影TOP250(详解)
目录
- 开发工具
- 目标
- 网页分析
- 正则匹配分析
- 代码实例
- 总结
开发工具
- python版本: python-3.8.1-amd64
- python开发工具: JetBrains PyCharm 2018.3.6 x64
- 安装requests库(指定阿里镜像安装会很快)
pip install requests -i http://mirrors.aliyun.com/pypi/simple/
-豆瓣电影TOP250网页地址https://movie.douban.com/top250
目标
获取豆瓣电影TOP250中电影名称,年份,评分和评论数
网页分析
在浏览器中右键点击查看网页源代码
该网页内容为服务器端渲染展示内容,需要获取网页源代码抓取数据
<ol class="grid_view"><li><div class="item"><div class="pic"><em class="">1</em><a href="https://movie.douban.com/subject/1292052/"><img width="100" alt="肖申克的救赎" src="https://img2.doubanio.com/view/photo/s_ratio_poster/public/p480747492.webp" class=""></a></div><div class="info"><div class="hd"><a href="https://movie.douban.com/subject/1292052/" class=""><span class="title">肖申克的救赎</span><span class="title"> / The Shawshank Redemption</span><span class="other"> / 月黑高飞(港) / 刺激1995(台)</span></a><span class="playable">[可播放]</span></div><div class="bd"><p class="">导演: 弗兰克·德拉邦特 Frank Darabont 主演: 蒂姆·罗宾斯 Tim Robbins /...<br>1994 / 美国 / 犯罪 剧情</p><div class="star"><span class="rating5-t"></span><span class="rating_num" property="v:average">9.7</span><span property="v:best" content="10.0"></span><span>2499740人评价</span></div><p class="quote"><span class="inq">希望让人自由。</span></p></div></div></div></li><li><div class="item"><div class="pic"><em class="">2</em><a href="https://movie.douban.com/subject/1291546/"><img width="100" alt="霸王别姬" src="https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2561716440.webp" class=""></a></div><div class="info"><div class="hd"><a href="https://movie.douban.com/subject/1291546/" class=""><span class="title">霸王别姬</span><span class="other"> / 再见,我的妾 / Farewell My Concubine</span></a><span class="playable">[可播放]</span></div><div class="bd"><p class="">导演: 陈凯歌 Kaige Chen 主演: 张国荣 Leslie Cheung / 张丰毅 Fengyi Zha...<br>1993 / 中国大陆 中国香港 / 剧情 爱情 同性</p><div class="star"><span class="rating5-t"></span><span class="rating_num" property="v:average">9.6</span><span property="v:best" content="10.0"></span><span>1858334人评价</span></div><p class="quote"><span class="inq">风华绝代。</span></p></div></div></div></li>
正则匹配分析
这里用到最多的是懒惰匹配.? ; 还有给要获取的内容命名(?<名称>.?)
<li>.*?<div class="item">.*?<span class="title">(?P<name>.*?)'
r'</span>.*?<p class="">.*?<br>(?P<year>.*?) .*?'
r'<span class="rating_num" property="v:average">(?P<rating_num>.*?)</span>.*?'r'<span>(?P<evaluationsNum>.*?)人评价</span>
代码实例
import requests
import re
import json
from requests.exceptions import RequestException
import csv
import timedef get_one_page(url):try: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",'Connection': 'close'}response = requests.get(url, headers=headers)if response.status_code == 200:response.close()return response.textreturn Noneexcept RequestException:return Nonedef parse_one_page(html):pattern = re.compile(r'<li>.*?<div class="item">.*?<span class="title">(?P<name>.*?)'r'</span>.*?<p class="">.*?<br>(?P<year>.*?) .*?'r'<span class="rating_num" property="v:average">(?P<rating_num>.*?)</span>.*?'r'<span>(?P<evaluationsNum>.*?)人评价</span>', re.S)result = pattern.finditer(html)for it in result:yield {'name': it.group("name"), # 电影名'year': it.group("year").strip(), # 年份'rating_num': it.group("rating_num"), #排名'evaluationsNum': it.group("evaluationsNum") # 评分}def write_to_txt(content):with open('result.txt', 'a', encoding='utf-8') as f:# print(type(json.dumps(content)))f.write(json.dumps(content, ensure_ascii=False) + "\n")def write_to_csv(content):f = open('douban.csv', mode='a',encoding='utf-8')csvwriter = csv.writer(f)csvwriter.writerow(content.values())def main(offset):url = 'http://movie.douban.com/top250?start=' + str(offset)html = get_one_page(url)for item in parse_one_page(html):print(item)# write_to_txt(item)write_to_csv(item)if __name__ == '__main__':for i in range(10):main(offset=i * 25)time.sleep(1) # 如果速度过快,则会无响应,所以这里又增加了一个延时等待
总结
1.time.sleep(1)增加延时等待,避免访问速度过快
2.open打开文件时,mode模式用a,可以进行文件内容的追加
python爬虫实例-运用requests抓取豆瓣电影TOP250(详解)相关推荐
- Python爬虫实战(一):爬取豆瓣电影top250排名
先上代码 #coding=utf-8 import re import urllib.requestdef getHtml(url):page = urllib.request.urlopen(url ...
- python爬取豆瓣电影top250并保存为xlsx_python抓取豆瓣电影Top250数据并写入Excel
douban python抓取豆瓣电影Top250数据并写入Excel 1.将目标网站上的页面抓取下来 2.将抓取下来的数据根据一定的规则进行提取 create table `tb_movie`( i ...
- Python爬虫入门 | 7 分类爬取豆瓣电影,解决动态加载问题
比如我们今天的案例,豆瓣电影分类页面.根本没有什么翻页,需要点击"加载更多"新的电影信息,前面的黑科技瞬间被秒-- 又比如知乎关注的人列表页面: 我复制了其中两个人昵称 ...
- python爬虫(一)爬取豆瓣电影排名前50名电影的信息
python爬虫(一)爬取豆瓣电影排名前50名电影的信息 在Python爬虫中,我们可以使用beautifulsoup对网页进行解析. 我们可以使用它来爬取豆瓣电影排名前50名的电影的详细信息,例如排 ...
- python2.7抓取豆瓣电影top250
利用python2.7抓取豆瓣电影top250 1.任务说明 抓取top100电影名称 依次打印输出 2.网页解析 要进行网络爬虫,利用工具(如浏览器)查看网页HTML文件的相关内容是很有必要,我使用 ...
- Python3 抓取豆瓣电影Top250
利用 requests 抓取豆瓣电影 Top 250: import re import requestsdef main(url):global numheaders = {"User-A ...
- 【go语言爬虫】go语言爬取豆瓣电影top250
一.需求分析 用go语言抓取 豆瓣电影top250 抓取url: https://movie.douban.com/top250 抓取字段:电影名称.评分.评价人数 二.运行: 正在抓取第0页-- 肖 ...
- python爬取豆瓣电影top250_【Python3爬虫教程】Scrapy爬取豆瓣电影TOP250
今天要实现的就是使用是scrapy爬取豆瓣电影TOP250榜单上的电影信息. 步骤如下: 一.爬取单页信息 首先是建立一个scrapy项目,在文件夹中按住shift然后点击鼠标右键,选择在此处打开命令 ...
- 跟随B站视频学Python爬虫过程(6):豆瓣电影TOP250并存Excel(使用urllib, bs, re, xlwt库)
出于督促自己学习以及未来回顾和分享的目的,记录一下自己的学习过程. B站视频号:BV12E411A7ZQ ep15-25. 完成爬取信息,处理数据,保存到Excel.具体流程为: 1. 找到目标网页的 ...
最新文章
- bugzilla部署
- laravel修改storage目录和bootstrap目录
- VC++ 使用attributes定义接口
- 技术选型:Sentinel vs Hystrix
- OpenStack精华问答 | OpenStack 网络中 OpenFlow 规则的作用是什么?
- 协程(Python)
- python反向查找字符_序列化使用(正向和反向查找)
- 【渝粤题库】陕西师范大学200071 古代汉语 作业(高起本、高起专)
- ORACLE 指令基础学习
- java会议记录管理系统实验报告代码_会议记录管理系统.docx
- 计算机网络基础 — Bypass 网卡
- 7500 cpuz跑分 i5_锐龙R5 1400对比i5 7500哪个好 R5-1400与i5-7500区别对比详细评测
- java 换行规范_Java代码规范
- Mysql数据库锁与隔离级别
- Cassandra启动过程详解
- angular 访问图片路径错误
- 深拖式多道高分辨率地震探测系统
- php转java学什么书,推荐给java软件工程师以及从java转向php程序猿的一本好书
- 蜗蜗的毛衣花样c++
- 基于pyqt5 构建弹窗进度条,在大型计算中实时显示进度
热门文章
- 五、HTML5 千纸鹤动画特效
- 致敬生命 看南京鼓楼医院如何打造IT界的“急救中心”
- poj 3164 Command Network
- [remote rejected] master->master (unpacker error)
- 双缝干涉实验的新设计
- jzoj5399 【NOIP2017提高A组模拟10.7】Confess
- Ajax怎么获取data为集合的值,vue,ajax获取本地的json文件,赋值后,computed和mounted里访问不到重新赋值后的listDatas...
- 毕业一年了,总结一下一年的收获!顺便回忆一下!
- 被国产芯片支配的恐惧——MAX3232 ESE+
- 哈工大csapp lab3