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看我的源码

python爬虫爬取豆瓣_爬虫,从爬取豆瓣开始相关推荐

  1. python批量下载静态页面_爬虫实战之,爬取壁纸,批量下载

    一.前言 在开始写爬虫之前,我们先了解一下爬虫 首先,我们需要知道爬虫是什么,这里直接引用百度百科的定义 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按 ...

  2. python爬虫实时更新数据_爬虫的增量式抓取和数据更新

    一些想法 页面爬的多了,量上去了之后,就会遇到其他的问题,其实不管做什么技术量大了都会有问题.一般情况下,我认为解决"大量"问题的思路有两个:一种是着力于优化系统的能力,让原本只能 ...

  3. scrapy mysql 豆瓣_利用Scrapy爬取豆瓣图书并保存至Mysql数据库

    Scrapy是一个纯Python语言写的爬虫框架,本次用它来爬取豆瓣图书的数据. 准备工作 没有安装Scrapy的同学需要安装一下,有两种方式安装: 安装了Anaconda的同学直接在命令行输入con ...

  4. python网页版百度_python,_爬虫 页面不存在_百度搜索,python - phpStudy

    爬虫 页面不存在_百度搜索 1.学写爬虫,遇到一个问题,加了values={"wd":"test","ie":"utf-8&quo ...

  5. 爬虫python和c语言区别_爬虫概述 - Python教程 - C语言网

    网络爬虫(又称为网页蜘蛛,网络机器人,更经常的称为网页追逐者),它按照一定的规则自动地抓取网络信息. 1. 产生背景 随着时代的进步,互联网上拥有大量的信息,但是我们该如何高效的获取这些信息成为了一个 ...

  6. python开发自己的工具包_爬虫开发python工具包介绍 (4)

    本文来自网易云社区 作者:王涛 此处我们给出几个常用的代码例子,包括get,post(json,表单),带证书访问: Get 请求@gen.coroutine def fetch_url(): try ...

  7. python网页信息违法吗_爬虫到底违法吗?这位爬虫工程师给出了答案

    大家好,本期将为大家来采访一位爬虫工程师,与他相识是在一个技术号主群中,只有他怼了我的文章,所以也算不打不相识!他便是小周码字号主:Loco. 文章主要分为三部分,第一部分为Loco自述:简单讲述一下 ...

  8. python爬虫算法深度优先遍历_爬虫的广度优先和深度优先算法

    广度优先算法介绍 整个的广度优先爬虫过程就是从一系列的种子节点开始,把这些网页中的"子节点"(也就是超链接)提取出来,放入队列中依次进行抓取.被处理过的链接需要放 入一张表(通常称 ...

  9. 爬虫 页面元素变化_爬虫 基本知识 萌新

    爬虫 定义 网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模拟 ...

  10. 反爬虫兵法演绎04 _ 爬虫的首轮攻势:如何低调地拿到自己想要的数据?

    本资源由 Java学习者论坛 收集整理 04 | 爬虫的首轮攻势:如何低调地拿到自己想要的数据? 你好啊,我是DS Hunter.又见面了. 前面我和你聊了聊爬虫和反爬虫的历史,感觉这是一个内卷的死结 ...

最新文章

  1. 子窗体更新父窗体控件内容
  2. select标签的使用
  3. 如何过渡至 Python 3
  4. 百度和360的关键词提交查询
  5. HarmonyOS之深入解析线程间的通信
  6. roc曲线怎么绘制_ROC曲线和PR曲线
  7. ubuntu16.04 + kinetic +turtlebot2配置
  8. (单层)感知机学习规则
  9. Scott Mitchell 的ASP.NET 2.0数据教程之三十一::使用DataList来一行显示多条记录
  10. 大白菜U盘启动制作工具怎么用?
  11. android开发 手写签名,Android实现手写签名
  12. u盘制作启动盘后容量变小
  13. 摄像头安装指南( spca5xx)
  14. Asp.Net 上传图片并生成高清晰缩略图
  15. Elasticsearch语法知多少之Multi_match query
  16. 使用PyCharm安装mayavi
  17. 正则 显示0-100的数字(可以是小数也可以是整数,不能是01,02可以是0.1)
  18. 配置路由器用SSH登陆
  19. VCS与Verdi使用中遇到的问题
  20. linux中cp命令详解

热门文章

  1. Android-Gallery实现的电影排片表
  2. 创建jira plugin插件、创建jira实例生成jar包总结
  3. 信创生态 | 未来智安XDR与凝思安全操作系统完成产品兼容性互认证
  4. 苹果内购非applepay哦
  5. sqlserver中,insert into XXX values(N'xxx'),这里N的意思!
  6. 《人人都是产品经理》读书笔记(1)
  7. Niushop开源商城特点
  8. 删库惹的祸,顺丰高级工程师“被跑路”!
  9. castle典范英语 storm_典范英语4阶 17 castle adventure(点读)
  10. java之简介ASCII码表