python爬取豆瓣电影排行前250获取电影名称和网络链接[静态网页]————爬虫实例(1)
目录
1.算法原理:
2.程序流程:
3.程序代码:
4.运行结果(部分结果展示):
5.结果分析:
1.算法原理:
(1)利用import命令导入模块或者导入模块中的对象;
①利用requests库获取数据;
②用BeautifulSoup库将网页源代码转换成BeautifulSoup类型,以便于数据的解析和处理;
③用time库进行时间延时,避免访问速度过快被封禁(封禁后会一段时间内无法进行对网址的访问);
(2)利用resquests.get()获取的数据,其中第一个参数为网页链接,第二个参数为请求头Headers,返回的数据类型为字符串类型网页源代码;
(3)利用BeautifuSoup()命令将获取的网页源代码转化为BeautifuSoup对象,第一个参数为要解析的HTML文本,即网页源代码,第二个参数为解析HTML的解析器;
(4)利用CSS选择器,找到我们所需要的数据,在CSS选择器中,“#”表示id,“.”表示class;
(5)tag(标签)对象的常用属性/方法
属性/方法 | 作用 |
tag.find() | 返回符合条件的首个数据 |
tag.find_all() | 返回符合条件的所有数据 |
tag.text | 获取标签的文本内容 |
tag['属性名'] | 获取标签HTML属性的值 |
例如:
(6)字符串的format格式:<模板字符串>.format(<以逗号分隔的参数>),format()中参数和前面的{}顺序一 一对应例如:
print('我是{},来自{}。'.format('小浪','中国'))
也可以在{}中加入序号,format()括号中类似列表进行读取,序号对应列表的下标,例如:
print('我是{1},来自{0}。'.format('中国','小浪'))
也可以给占位符{}命名,例如:
print('我是{name},来自{country}。'.format(country='中国',name='小浪'))
以上三种都输出:我是小浪,来自中国。
2.程序流程:
(1)利用import导入第三方库requests,time和bs4库中的BeautifulSoup;
(2)创建get_film函数,形参为变量link(用于传入网址,因为每页只有25部电影,爬取250部,每个网页链接末尾的查询字符串会有所不同)
(3)为了应对反爬虫机制,这里修改请求头,将网页中User-Agent字段定义为字典,传入requests.get()命令中,赋值给变量res(当然,也有其他的方法,比如通过别的IP访问网站,具体请自己查看requests的官方文档:https://cn.python-requests.org/zh_CN/latest/);
①: 打开豆瓣电影top250排行版,右击(以搜狗浏览器为例)--->审查元素,点击方块内图标
②:随便点击一个电影名,以《肖申克的救赎》为例,网页加载完毕点击Network标签,里面可能为空的,刷新一下网页就好了。点击Network——>name中第一个标签——>找到Requests Headers标签——>找到User-Agent字段。
(4)将res.text(源代码的字符串格式)传给BeautifulSoup命令,并且用Python内置的解析器html.parser,赋值给变量soup;
(5)利用CSS选择器找到标签为div,class="hd"的所有元素(随便点击一部电影名称,以《肖申克的救赎》为例,观察到的规律为电影链接、电影名分布在标签为:div,class="hd"的标签“a”中),传入soup.select()命令中,赋值给item;
(6)遍历item中的所有元素,观察发现链接在标签a中的href属性中,电影名在标签a中第一个标签span的文本中,此时用find命令可以找到第一个符合条件的元素,找到第一个标签其中的文本内容,并输出电影名和电影链接;
(7)观察豆瓣10页的网页链接(每页25个电影,其实就观察几页就可以发现规律):
https://movie.douban.com/top250?start=0&filter=(第一页,从一开始网页打开没有问号后的查询字符串,从其他页跳到第一页就有了,第一页带查询字符串和不带查询字符串打开内容相同)
https://movie.douban.com/top250?start=25&filter=(第二页)
https://movie.douban.com/top250?start=50&filter=(第三页)
通过以上三个网页链接的对比发现,只有start后面的发生了改变,那么就可以利用字符串的format格式,进行创建字符串列表link_all
(8)遍历10页网页,传入之前建立的函数get_film,利用time.sleep()进行延时爬取,防止访问速度过快被对方服务器封禁。
3.程序代码:
import requests
import time
from bs4 import BeautifulSoupdef get_film(link):headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36 SE 2.X MetaSr 1.0'}res=requests.get(link,headers=headers)soup=BeautifulSoup(res.text,'html.parser')items=soup.select('div.hd a')for i in items:name=i.find('span').textlink_film=i['href']print('电影名:',name,'网址:',link_film)l='https://movie.douban.com/top250?start={}&filter='
link_all=[l.format(i*25) for i in range(10)]
for i in range(10):get_film(link_all[i])time.sleep(1)
4.运行结果(部分结果展示):
5.结果分析:
程序获取的结果与预期结果相同,在找到电影名的过程中可以使用find和find_all命令,可以不使用CSS选择器,也可以将电影名存到txt文档,或者excel文档中,便于储存。此程序仅演示豆瓣电影名、电影网络链接,其他静态网页也可通过此方法进行爬取。
python爬取豆瓣电影排行前250获取电影名称和网络链接[静态网页]————爬虫实例(1)相关推荐
- Python爬虫实战(1) | 爬取豆瓣网排名前250的电影(下)
在Python爬虫实战(1) | 爬取豆瓣网排名前250的电影(上)中,我们最后爬出来的结果不是很完美,这对于"精益求精.追求完美的"程序猿来说怎么能够甘心 所以,今天,用pyth ...
- Python爬虫实战(1) | 爬取豆瓣网排名前250的电影(上)
今天我们来爬取一下豆瓣网上排名前250的电影. 需求:爬取豆瓣网上排名前250的电影,然后将结果保存至一个记事本里. 开发环境: python3.9 pycharm2021专业版 我们先观察网页,看看 ...
- python实战(一)Python爬取猫眼评分排行前100电影及简单数据分析可视化python实战(一)Python爬取猫眼排行前一百电影及简单数据分析可视化
python实战(一)Python爬取猫眼排行前一百电影及简单数据分析可视化 一.抓取数据 需要的库 request库 响应http请求 json库 将文本保存成json形式 pyquery 类似JQ ...
- python实战(一)Python爬取猫眼评分排行前100电影及简单数据分析可视化
python实战(一)Python爬取猫眼排行前一百电影及简单数据分析可视化 一.抓取数据 需要的库 request库 响应http请求 json库 将文本保存成json形式 pyquery 类似JQ ...
- Python爬取豆瓣《哪吒之魔童降世》影评
这几天朋友圈,微博都被<哪吒之魔童降世>这部电影刷屏了,有人说它是"国漫之光",上映4天,票房已经突破9亿了.口碑上,影片自点映开分以来,口碑连续十天稳居所有在映影片榜 ...
- 利用python爬取豆瓣电影top250
利用python爬取豆瓣电影top250: 注:本内容只是作为个人学习记录 1.业务分析 进入网页https://movie.douban.com/top250 可以看见每部电影都呈现在眼前,点击电影 ...
- Python爬取豆瓣电影top250的电影信息
Python爬取豆瓣电影top250的电影信息 前言 一.简介 二.实例源码展示 小结 前言 相信很多小伙伴在学习网络爬虫时,老师们会举一些实例案例讲解爬虫知识,本文介绍的就是经典爬虫实际案例–爬取豆 ...
- 源码大公开!Python爬取豆瓣电影Top250源代码,赶紧收藏!
哈喽~大家好,我是恰恰.不知道是不是有很多小伙伴跟我一样,很喜欢看电影,尤其是那种别人推荐的豆瓣高分电影,所以学Python就有一个好处,用Python爬取豆瓣电影那是分分钟的事,再也不用因为有些电影 ...
- python 爬取豆瓣电影排名
python 爬取豆瓣电影排名 任务要求 获取豆瓣电影排名前250信息 打包进文件夹 代码展示 代码如下 import requests#导入requests库 import redef GetHtm ...
最新文章
- NASA指定首批9名宇航员,参与波音和马斯克商业载人航天
- 前端学习(2568):使用高级特性provide和inject
- vb 根据pid获取句柄_C++中避免返回指向对象内部的句柄(handles)
- 虚拟化VMware ESXi 6.7服务器安装配置详细步骤图文
- 对于 Shift-JIS 编码的理解 (win10中 查看 Shift-JIS 编码 コード)
- 修改FTP服务器时长,连接ftp服务器的时长怎么设置
- 传统量化与ai量化对比_量化AI偏差的风险
- 软件园区网络设计之网络详细设计
- layer使用心得3
- plex插件显示无服务器,Plex插件
- 手机号归属地区编码_不懂就问丨手机号码为什么是11位呢?
- python爬取笔趣阁小说
- 寻找2020java 蓝桥杯
- 数列和级数(基本概念)
- excel快捷键设置
- android夜间切换失败,android夜间模式切换
- 浅谈设计模式-依赖倒转(倒置)原则
- 谷歌等大型科技公司对你了解多深,你想知道吗?
- 串口DCB结构体详解
- 【Oracle】角色用户授权等操作