IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 网络爬虫技术概述 -> 正文阅读

[Python知识库]网络爬虫技术概述

1、爬虫概述

1.1、什么是爬虫

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

通俗的讲,就是一种能够自动获取网页内容并可以按照指定规则提取相应内容的程序。

1.2、爬虫原理

那么网络爬虫是从哪抓取,又是按照怎么样的规则呢?
首先,我们需要了解URL。URL在日常网络中无处不在,如www.baidu.com, www.taobao.com,简单来说,网络地址就是URL。网络爬虫就是从URL进行爬取。即爬虫的内容就是具体地址下的内容,如淘宝下的销售信息。
那么,是如何通过URL进行爬取内容的呢?我们首先了解,按下URL地址后,会发生什么。
1.前端(我们看到的页面)向后端发送请求。
2.后端处理请求,对网页进行渲染,返回渲染的页面。
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的功能。当然我们也能够自己编写多线程来进行抓取,但是多线程模型较为复杂,用之不当可能会出现死锁等情况,造成整个程序崩溃。

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的一个小例子

3、爬虫技术难点

3.1、反爬虫

3.2、数据获取

3.3、数据清洗

4、爬虫学习计划

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

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-09-04 17:28:29  更:2021-09-04 17:29:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 12:42:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码