0%

最简单的爬虫项目之爬取豆瓣电影TOP250

作者:18级 潘愽浩

Hello,大家好,相信很多人都对爬虫有着浓厚的兴趣,今天我来为大家简单的讲一下什么是爬虫,并通过爬取豆瓣电影TOP250来让大家更清楚的明白爬虫的工作原理。

网络爬虫(又称为网页蜘蛛,网络机器人),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。

由于python语法简单简洁,第三方模块比较丰富,关于爬虫的网络请求模块和网络解析模块(Lxml,BeautifulSoup,pyQuery)也比较多,并且有高效稳定的scrapy网络爬虫框架,以及爬scrapy,redis分布式爬虫框架,Python也是一门胶水语言,对于其他语言的调用比较方便,所以我们在爬虫时一般使用python语言。

首先,我们要明白一个网页所具备的三大特征:
• 每一个网页都有一个唯一的url(统一资源定位符)来进行定位
• 网页都是通过HTML<超文本>文本展示的
• 所有的网页都是通过HTTP<超文本传输协议>(HTTPS)协议来传输的

然后,我们需要安装requests和BeautifulSoup4这两个库,requests是python实现的简单易用的HTTP库 ,bs4可以通过解析requests获取的网页信息为用户提供需要抓取的数据。

安装方法如下:

  1. 运行cmd命令提示符
  1. 输入pip install requests,等待安装完成
  1. 输入pip install bs4,等待安装完成

(若在cmd中显示不是外部或内部命令,也不是可运行的程序或批处理文件,则说明未把python设为环境变量,设置方法请点击
https://jingyan.baidu.com/article/48206aeafdcf2a216ad6b316.html
查看)

明白了这些,我们应该就有了爬取豆瓣电影TOP250的大致思路:

  1. 找到记载有豆瓣电影TOP250的网站
  2. 获取该网站的HTML信息
  3. 整理数据,将所需要的信息输出

好了,废话不多说,让我们进入我们的第一个爬虫项目的实战中吧!

使用谷歌打开含有我们需要的信息的网站“https://movie.douban.com/top250

我们先把这个网站的信息使用requests库中的get函数获取出来并保存到req变量中:

1
req = requests.get(‘https://movie.douban.com/top250’)

然后,我们按F12打开审查元素

点击箭头所指的键,然后点击网页中我们所需要获取的信息(即肖申克的救赎)

上图中肖申克的救赎所存放的位置已经显示出来了

我们可以看到《肖申克的救赎》存放在id为hd的div标签中的a,span标签中,然后我们再通过看《霸王别姬》《阿甘正传》等发现它们的标签存放地是一样的!

这样,我们就可以把req变量中的内容使用BeautifulSoup4库解析出来存放到soup变量中:

1
2
3
4
soup = bs4.BeautifulSoup(req.text,’ html.parse’)
txt = soup.find_all(‘div’,class_ = ‘hd’)
for i in txt:
print(i.a.span.text)

运行出来的结果为:

这样,第一页中所包含的前25名的电影名称就获取完成了!

当我们来到第二页时,会发现该网页的url变成了‘https://movie.douban.com/top250?start=25&filter=’,第三页则是‘https://movie.douban.com/top250?start=50&filter=’,再拐到第一页时,url变成了‘https://movie.douban.com/top250?start=0&filter=’,怎么样,发现规律了吗?url有一个成25的倍数变化的数,若为75则是第四页,225则为第十页!

因此,我们可以做一个循环结构,将十页的内容全部获取出来并依次输出:
for i in range(0,250,25):

1
2
3
4
5
6
for i in range(0,250,25):
url = ‘https://movie.douban.com/top250?start={}&filter=’.format(i)
soup = bs4.BeautifulSoup(req.text,’ html.parse’)
txt = soup.find_all(‘div’,class_ = ‘hd’)
for j in txt:
print(j.a.span.text)

最终我们的代码如下:

好了,一个最基本的爬虫程序就这样写好啦,是不是很简单呢。当然,爬虫远不止于此,在后面我们还要讲到各种各样的反爬虫机制和不同的请求(get,post),让我们敬请期待!