python爬虫爬取豆瓣_爬虫,从爬取豆瓣开始

1

爬虫概述

当初第一次接触python,听的最多的就是爬虫爬虫,搞得我一脸蒙蔽,因为我从来都没听过这么新颖的词,而且我还天真的以为是不是python长得像一条小虫子,所以才叫爬虫。

直到后来经过不断的百度之后,我才发现自己是有多么的无知。

原来爬虫全名为“网络爬虫”,又名“网络蜘蛛”。

如果把互联网比作一张大网,那么大网中有着数以万计个,由网交叉而成的节点。这时,我们化身的网络蜘蛛就可以随着网爬到各个节点,爬取节点的资源,这就叫做网络爬虫。

众所周知,网页是由html,js,css等文件所构成,再经浏览器解析呈现在我们面前的。而网络爬虫就是爬取网页的程序,所以我们要获取网页的资源,就是对网页进行解析,也就是对html,js,css等进行解析,从而将想要的东西爬取下来。

作为一个实干家,既然要了解爬虫,那我就从实战开始学,下面就用一个最基础的例子让大家认识一下爬虫吧。

1

爬取

豆瓣是我挺喜欢的一个网站,因为有时候书荒了,或者想看电影了,我都会去豆瓣瞅一瞅,有哪些评分高的书籍和电影。

当然喜欢它还有另外一个原因,那就是豆瓣可是新手练习爬虫的必爬网站啊!

所以我们今天的目标也是豆瓣,要爬取的则就是豆瓣电影的top250。

之前说过,互联网就是一张大网,我们则是大网中一只小爬虫,我们虽然小但是只要有通往各个节点的通道,我们就可以在大网中畅游。

同理,我们要进入豆瓣的top250网页,也需要一个通道,也就是url。

既然找到了通道,那俺们就可以进去瞅一瞅,顺便把网页的源码给爬下来了。

要爬网页的话,那就要用到我们python里的requests库了,不了解这个库的同学可以google学习一下。

我们先写上第一个函数,作用就是获取首页源码

在此之前还要导入requests库(import requests)

我们这个函数的作用是通过url获取网页源码,所以我们要先写形参url,用来接收我们之后传进来的实参。

将函数的框架搭好之后,我们就要开始填充内容了。

为了获取网页源码,我们就要用这一句:

response = requests.get(url)

这一句爬取了网页源码之后,我们就可以将爬取到的内容返回了

return response.text

至于这个函数里的其他内容就显得不是那么重要了,if是用来判断爬取成功还是失败,try except 则是用来显示异常的。

这个函数结束之后让我们来测试一下

if __name__ == '__main__':

在这里我给了url一个网址当作它的值,这个网址就是我们要爬取的网址

然后将get_page()函数的返回值赋值给html,根据函数中写的,我们可以知道,html最终就存储了爬取的网页源码。

我们试着print输出看看

吼吼结果还真的成功输出了网页的源码。

2

分析

现在我们已经爬到了网页的源码,接下来的一部就是要对源码进行分析了。

在分析之前,我们首先要明确,我们要获取网页中的哪一部分。

比如我们想要获取250个电影的名字。

分析源码,顾名思义,就是要去分析网页的源代码,让我们回到浏览器,F12查看源代码(推荐大家用谷歌浏览器)

这种时候就要考验我们的html功底了,

根据进一步的顺藤摸源码,让我在源码中找到了ol标签,这时候通过点击ol可以选择右边的所有电影,这就让我知道了,这一页的电影中都藏在ol标签中,并且li标签与每一个电影都相互对应着。

知道了这些之后,我们就点开li标签继续探索。

嘿嘿还真被我逮住了,我们发现电影的标题就藏在li标签内。

我们接着去找其他的li标签,发现每一个电影的标题都放在对应的li标签中,而且格式都是一样的。

有了这些信息我们就可以写第二个函数了

第二个函数用到了正则表达式,正则表达式一时半会儿也说不清,所以你们还是直接去这了解一下吧。

当初俺也是去这里学的,20分钟让你快速入门正则。

parse变量我给它传递了一串正则表达式,内容是定位电影标题的位置。

然后通过re.findall在网页源码中找到标题

parse_over = re.findall(parse, html)

紧接着通过for 循环和yield进行迭代,因为函数中有了yield后,整个函数就成为了迭代器。

然后我们整个程序再进一步完善

items = get_parse(html)

这一句作用是将函数get_parse传给item,使item变成迭代器,既然变成了迭代器,那么它便是可迭代对象了,所以就可以用for循环进行输出。

看一下结果

成功了,我们成功爬取了第一页电影的标题,但是我们的目的是爬取250个电影的标题欸!可不是爬取那么点哦。

这时让我们回到豆瓣top首页观察一下。

当我们处于第一页的时候url是这样的

那切换到第二页会怎能样呢?

我们发现url

变为了

继续点击第三页第四页

显然url的变化是有规律的,都是在原有的基础上加了

?start=25&filter=

然后start后面的数字都是以每一页,25的步数增加的。

由此我们可以猜想,既然其他页的url都是这个形式

那么第一页会不会形式也跟其他页一样呢,这时我们来验证一下,既然是以25为步数,那么当start=0的时候,会显示哪一页呢?

吼吼原来是第一页啊!

这下规律就被我们找到了,由此我们可以想到,既然url是有规律的,而且有规律的地方是数字,那我们是否可以用for循环来控制呢?

答案是,当然可以!

所以我们进一步修改一下我们的代码

这样子就可以爬取250个电影的电影名了。

2

存储

现在我们既然能爬取数据了,那接下来一步就是存储数据了。

我们再加一个函数,用于存储

然后再看看完整后的代码

这时候我们运行之后,就可以爬取数据,然后在当前页面下生成一个txt文件,将电影名称放入文件当中。

这样子,爬虫三步,爬取,分析,存储就完成了,这个例子是最基础的,但也是爬虫初学者必练的。

有兴趣的还可以在此基础上,将电影的导演和图片爬下来,反正我是爬下来了。

如果想要源码的话,可以后台回复“豆瓣源码”

或者去Github看我的源码

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值