文章目录
一、准备工作
1.安装python3.7
打开浏览器搜索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