网络爬虫技术概述

533次阅读
没有评论

文章目录

1、爬虫概述

1.1、什么是爬虫

网络爬虫技术概述

网络爬虫,是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。

网络爬虫的英文即Web Spider,是一个很形象的名字。把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛。网络蜘蛛是通过网页的链接地址来寻找网页,从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都抓取完为止。如果把整个互联网当成一个网站,那么网络蜘蛛就可以用这个原理把互联网上所有的网页都抓取下来。

1.2、爬虫原理

那么网络爬虫是从哪抓取,又是按照怎么样的规则呢?
首先,我们需要了解URL。URL在日常网络中无处不在,如www.baidu.com, www.taobao.com,简单来说,网络地址就是URL。网络爬虫就是从URL进行爬取。即爬虫的内容就是具体地址下的内容,如淘宝下的销售信息。
那么,是如何通过URL进行爬取内容的呢?我们首先了解,按下URL地址后,会发生什么。
网络爬虫技术概述

1.前端(我们看到的页面)向后端发送请求(request)。
2.后端处理请求,对网页进行渲染,返回渲染的页面(response)。
3.前端展示渲染后的页面。
而渲染的页面实际上是以html的格式返回回来。我们所需要抓取的内容,就是返回的html页面中的内容。
当我们按下f12,就能看到渲染后的html,下面的百度首页返回的html内容,网络爬虫技术概述
可以看到,在我们看到的页面的内容,无论是文本或者图片,在html中都有对应。网络爬虫就是从对应的页面(html)中获取我们所需要的数据。

概括下网络爬虫系统的工作流程

网络爬虫技术概述
Web网络爬虫系统首先将种子URL放入下载队列,然后简单地从队首取出一个URL下载其对应的网页。得到网页的内容将其存储后,再经过解析网页中的链接信息可以得到一些新的URL,将这些URL加入下载队列。然后再取出一个URL,对其对应的网页进行下载,然后再解析,如此反复进行,直到遍历了整个网络或者满足某种条件后才会停止下来。

2、爬虫技术与框架

不同的语言都有自己的爬虫技术与框架,这里我们只介绍Python相关的。

2.1、request+BeautifulSoup

requset库能够帮助我们模拟请求,然后获取响应,我们就能够从响应的html中获取我们想要的数据了。
下面我们使用request库,向百度发送请求,然后获取对应的html。

import requests rsp = requests.get('http://www.baidu.com/') rsp.encoding = 'utf-8' print(rsp.text)

返回的数据如下

<html> <head> <meta http-equiv=content-type content=text/html;charset=utf-8> <meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer> <link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css> <title>百度一下,你就知道</title></head> <body link=#0000cc> <div id=wrapper> <div id=head> <div class=head_wrapper> <div class=s_form> <div class=s_form_wrapper> <div id=lg> <img hidefocus=true src=//www.baidu.com/img/bd_logo1.png width=270 height=129> </div> <form id=form name=f action=//www.baidu.com/s class=fm> <input type=hidden name=bdorz_come value=1> <input type=hidden name=ie value=utf-8> <input type=hidden name=f value=8> <input type=hidden name=rsv_bp value=1> <input type=hidden name=rsv_idx value=1> <input type=hidden name=tn value=baidu> <span class="bg s_ipt_wr"> <input id=kw name=wd class=s_ipt value maxlength=255 autocomplete=off autofocus></span><span class="bg s_btn_wr"> <input type=submit id=su value=百度一下 class="bg s_btn"> </span> </form> </div> </div> <div id=u1> <a href=http://news.baidu.com name=tj_trnews class=mnav>新闻</a> <a href=http://www.hao123.com name=tj_trhao123 class=mnav>hao123</a> <a href=http://map.baidu.com name=tj_trmap class=mnav>地图</a> <a href=http://v.baidu.com name=tj_trvideo class=mnav>视频</a> <a href=http://tieba.baidu.com name=tj_trtieba class=mnav>贴吧</a> <noscript> <a href=http://www.baidu.com/bdorz/login.gif?login&amp;tpl=mn&amp;u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 name=tj_login class=lb>登录</a> </noscript> <script>document.write('<a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u='+ encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ '" name="tj_login" class="lb">登录</a>');</script> <a href=//www.baidu.com/more/ name=tj_briicon class=bri style="display: block;">更多产品</a> </div> </div> </div> <div id=ftCon> <div id=ftConw> <p id=lh> <a href=http://home.baidu.com>关于百度</a> <a href=http://ir.baidu.com>About Baidu</a> </p> <p id=cp>&copy;2017&nbsp;Baidu&nbsp;<a href=http://www.baidu.com/duty/>使用百度前必读</a>&nbsp; <a href=http://jianyi.baidu.com/ class=cp-feedback>意见反馈</a>&nbsp;京ICP证030173号&nbsp; <img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>

通过rsp.text,我们以字符串的形式获取了html的内容,接下来,我们就能通过操作字符串,来获取对应的数据。比如说获取标题。

import requests rsp = requests.get('http://www.baidu.com/') rsp.encoding = 'utf-8' text = rsp.text start = text.index("<title>") end = text.index("</title>") title = text[start + 7 : end] print(title)

百度一下,你就知道

这里我们截取了标签中的内容。从而获取到了标题的信息。
这是最简单的爬虫,我们爬取了百度首页的标题信息,但是实际中的html页面会复杂上百倍,如淘宝页面。我们想要从大量的html中获取有用的数据,让我们自己写代码来截取,是十分繁琐的。因此,我们需要利用封装好的库,快速获取我们想要的内容,BeautifulSoup框架就应运而生了。
Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。
如下,通过bs我们能够快速获取对应标签中的内容

import requests from bs4 import BeautifulSoup rsp = requests.get('http://www.baidu.com/') rsp.encoding = 'utf-8' soup = BeautifulSoup(rsp.text,'lxml') print(soup.title)

结果如下

<title>百度一下,你就知道</title>

这样,我们就快速获取到了title标签和其内容。相关我们自己来处理,要方便很多。

2.2、scrapy

为什么使用scrapy?

1.更全面,更强大的功能。
scrapy不仅集成了数据抓取与处理的功能,另外还包含了监控,日志,自动化测试等功能。
2.异步抓取,更高的效率。
我们使用request爬取数据,都是同步进行的,这样效率是十分低下的,不能够利用现代多核CPU的功能。当然我们也能够自己编写多线程来进行抓取,但是多线程模型较为复杂,用之不当可能会出现死锁等情况,造成整个程序崩溃。
3.自动生成架构
通过scrapy的命令,能够自动生成的架构,将我们的代码模块化,分层,解耦,从而我们的代码更加优雅。

scrapy工作原理

网络爬虫技术概述
1、Scrapy Engine(引擎): 引擎负责控制数据流在系统的所有组件中流动,并在相应动作发生时触发事件。

2、Scheduler(调度器): 调度器从引擎接受request并将他们入队,以便之后引擎请求他们时提供给引擎。

3、Downloader(下载器): 下载器负责获取页面数据并提供给引擎,而后提供给spider。

4、Spider(爬虫): Spider是Scrapy用户编写用于分析response并提取item(即获取到的item)或额外跟进的URL的类。 每个spider负责处理一个特定(或一些)网站。

5、Item Pipeline(管道): Item Pipeline负责处理被spider提取出来的item。典型的处理有清理、 验证及持久化(例如存储到数据库中)。

6、Downloader Middlewares(下载中间件): 下载器中间件是在引擎及下载器之间的特定钩子(specific hook),处理Downloader传递给引擎的response。 其提供了一个简便的机制,通过插入自定义代码来扩展Scrapy功能。
7、Spider Middlewares(Spider中间件): Spider中间件是在引擎及Spider之间的特定钩子(specific hook),处理spider的输入(response)和输出(items及requests)。 其提供了一个简便的机制,通过插入自定义代码来扩展Scrapy功能。

scrapy的一个小例子

4、爬虫学习计划

python,html,http协议,正则表达式,scrapy。

Q&A

图片和视频如何获取?

大部分的图片和视频,可以从爬取的html中获取,获取下来为一个图片或者视频链接,然后我们通过发送http请求就能直接下载图片或者视频。
网络爬虫技术概述
网络爬虫技术概述
但是部分网站并不能直接看到图片或者视频地址,如百度百科,就需要通过一些特殊的手段进行爬取。

有哪些反爬虫技术?

1.登录时对用户名和密码进行加密。
2.登录时不仅只是用户名和密码。
3.对访问信息进行统计予以封锁。
4.User-Agent反爬和Referer反爬。

神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试

相关文章:

版权声明:Python教程2022-10-24发表,共计5343字。
新手QQ群:570568346,欢迎进群讨论 Python51学习