使用python3.7爬取豆瓣电影top250信息

该博客详细介绍了如何使用Python3.7爬取豆瓣电影Top250的电影信息,包括准备工作(安装Python和相关包),网页分析,信息筛选,正则表达式匹配评分和评价人数,以及数据写入文件。通过分析URL规律,利用requests和BeautifulSoup等工具,成功获取电影名称、链接、评分和评价人数等数据。
摘要由CSDN通过智能技术生成

一、准备工作

1.安装python3.7

打开浏览器搜索python,得到如下结果:选择图片中的python网站打开
打开图片中箭头网址
或直接访问python官网打开得到以下画面

下拉网页
在这里插入图片描述
选择自己需要的版本
点击后面的download即可下载。
具体安装可以参考其他博友文章,这里不进行过多赘述。

2.安装爬取豆瓣top250所需包

所需要的包有,jupyter(个人习惯的编辑环境,可以不安装)、re(正则表达式)、request、lxml、csv
安装所需包的过程:电脑键盘按住win+R,打开控制台,输入cmd,点击确定或回车啊。在这里插入图片描述
安装包的公式为pip install ******
以安装第一个包为例,输入pip install jupyter,回车,就可以在线安装了在这里插入图片描述
初次安装会需要一些时间,耐心等待一会,其他的包同理。

二、爬取网页

1.分析网页

在此处我们爬取豆瓣电影top250的电影信息

打开可以看到网页如下在这里插入图片描述
我们可以看到本页只有25部电影,我们的任务是爬取250部电影,共十页,分析每一页的区别,此处打开前三页和最后一页的网址对比

第一页
https://movie.douban.com/top250?start=0&filter=
第二页
https://movie.douban.com/top250?start=25&filter=
第三页
https://movie.douban.com/top250?start=50&filter=
最后一页(第十页)
https://movie.douban.com/top250?start=225&filter=
由分析我们可以知道,每一页的网址是差不多的,唯一的差别就是数字的变动,每一页的数值变化为25,在这里插入图片描述

除此之外,其余部分都是一样的。我们可以用一个for循环数组代码来实现这个网页
运用range函数,可以得到十个间隔为25的数组
在这里插入图片描述
此处的是226,而不是225是因为range函数后面的括号为前闭后开区间,即为前可取后不可取,三个数字代表的含义分别为从0开始,到226结束,间隔25.
将start=0改为start=%s,后面跟的%page表示将page函数中的数 值范围赋予给s,即可一次性构造出十个网页的链接,代码如下:

for page in range(0, 226, 25):
    url = 'https://movie.douban.com/top250?start=%s&filter='%page
    print (url)

运行代码可以得到如下图结果:在这里插入图片描述
至此,我们已经得到了十个网页的代码了。

2.爬取网页

打开豆瓣网页,对网页进行审查,
右击进入检查元素,点击网络(network),再点击所有(All)
对该网页进行刷新,下方会出现网页的组成元素,例如图片等
在这里插入图片描述
用箭头标出来的分别为请求方法和状态码,即我们使用的方法为get,返回的状态码为200则为成功,返回其他数值则不成功。

使用get语句访问浏览器,得到如下结果,意义为:系统识别出为非正常访问,拒绝返回值
在这里插入图片描述
此处我们需要伪装浏览器,用以躲过网站的识别,首先,讲代码审查中的用户代理复制过来,构造字典,用户代理的位置为:用户代理
豆瓣top250中右键检查,notework,all,下拉导航,出现的

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36

即为用户代理。

import requests
test_url = 'https://movie.douban.com/top250?start=0&filter=' 
headers = {
   
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'
}
requests.get(url=test_url,headers=headers)

运行即可得到状态码为200的返回值
在这里插入图片描述
在代码后加入.text,即可得到以下内容。在这里插入图片描述
我们可以看到,我们虽然成功得爬取了网页数据,不过看上去是很杂乱的,我们还需要筛选数据。
我们加上一句代码

reponse=requests.get(url=test_url,headers=headers).text
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值