python爬虫基础知识



一、基础入门
1.1
什么是爬虫
网络爬虫(亦称spider),是从网站或网络中获取信息的程序。
从目标网站或网络中发送指令以接收信息后进行分析以提取有价值的数据。
就其技术原理而言,其实就是通过程序模拟浏览器向网站发出请求的行为。就其实质而言,则是将网站返回的HTML代码、JSON数据以及二进制文件(如图片、视频)下载至本地装置,并将其存储以便后续使用。
1.2
爬虫基本流程
用户获取网络数据的方式:
方式1:浏览器提交请求--->下载网页代码--->解析成页面
方式2:向虚拟浏览器发起请求(获取页面源代码)→解析并提取所需信息→将数据存储至数据库或指定文件位置
爬虫要做的就是方式2。

1 发起请求
使用http库向目标站点发起请求,即发送一个Request
Request包含:请求头、请求体等
Request模块缺陷:不能执行JS 和CSS 代码
2 获取响应内容
如果服务器能正常响应,则会得到一个Response
Response包含:html,json,图片,视频等
3 解析内容
解析html数据:正则表达式(RE模块)、xpath(主要使用)、beautiful soup、css
解析json数据:json模块
解析二进制数据:以wb的方式写入文件
4 保存数据
数据库(MySQL,Mongdb、Redis)或 文件的形式。
1.3
http协议 请求与响应
http协议

Request :客户端将相关信息借助网络传输介质传输至服务器(socket server)。
Response :服务器接收到客户端的请求,并对该请求进行解析与处理后,在适当的时候向客户端返回处理后的数据(其中可能包含图片、js、css等类型的附加资源)
ps:当浏览器接收到Response内容时会解析其以展示给用户查看;爬虫程序模拟发送请求并接收到响应后会提取其中的有价值的数据
1.3.1 request
(1) 请求方式
常见的请求方式:GET / POST
(2)请求的URL
url是全球统一资源定位符(Uniform Resource Location),用于在互联网上唯一标识一个资源。例如:一张图片、一个文件或一段视频都可通过uri进行唯一标识。
(3)请求头
User-agent:请求头中缺省情况下没有指定客户端配置时,默认会将用户视为非法宿主
cookies:cookie用来保存登录信息
注意:一般做爬虫都会加上请求头。
请求头需要注意的参数:
Referrer:来源地址来自哪里(一些大型网站会利用Referrer字段进行防盗链策略;所有的网络爬虫也需要模拟这一机制)
User-Agent:访问的浏览器(要加上否则会被当成爬虫程序)
cookie:请求头注意携带
(4)请求体
请求体 在采用GET方法时 不包含内容 (GET请求中的请求体会被放置在URL的参数部分 直接可见) 而当采用POST方法时 请求体会以JSON格式的数据形式存在
登录界面提供了一系列功能选项,在此过程中涉及的所有信息都会被包含在请求中。访问登录界面并输入无效用户名或密码后进行提交申请,则会展示该操作(即post)。正常情况下,在完成正确登录后页面会跳转至下一状态(即无法捕捉到该post)。
1.3.2 response
(1)响应状态码
**** 200:代表成功
301:代表跳转
404:文件不存在
403:无权限访问
502:服务器错误
(2)response header
响应头字段需要注意的参数包括Set-Cookie:BDSVRTM=0;其中path属性通常会设置为多个值,并告诉浏览器将cookie保存到内存中。
(3)preview就是网页源代码
json数据
如网页html,图片
二进制数据等
二、基础模块
2.1 requests
requests是python实现的简单易用的HTTP库,是由urllib的升级而来。
开源地址:
https://github.com/kennethreitz/requests
中文API:
http://docs.python-requests.org/zh_CN/latest/index.html
2.2 re 正则表达式
在 Python 中使用内置的 re 模块来使用正则表达式。
缺点:处理数据不稳定、工作量大
2.3 XPath
这门技术允许开发者在XML文档中进行深入的数据操作。它不仅支持对元素的访问,还可以深入处理属性值
在Python中主要依赖于lxml库来完成xpath操作(框架内部则完全不依赖于lxml库,并可以直接完成xpath操作)。
lxml 是 基于HTML/XHTML/Parse 的解析器作为核心工具,在其功能模块中主要用于处理并提取 HTML/XHTML 格式的文档数据
LXML与Regular类似,并且同样是基于C语言开发的。它是一款高效率的Python-based HTML/XML解析器,并且以其高效的性能著称。我们可以通过先前掌握的XPath语法快速定位所需元素及其相关信息。
2.4 BeautifulSoup
如同Lxml一般,《Beautiful Soup》也被广泛认为是一种用于解析HTML/XML文档的工具软件;其核心功能是如何实现对HTML/XML数据的解析和提取。
使用BeautifulSoup需要导入bs4库
缺点:相对正则和xpath处理速度慢
优点:使用简单
2.5 Json
JavaScript对象表示法(JSON)是一种简洁高效的数据交换格式,在实际应用中使人们能够轻松地阅读和编写文档。同时便于计算机解析这些数据并生成相应的内容,在各种数据交互场景中都有广泛的应用,在网站前后台之间传递数据尤为常见。
在python中主要使用 json 模块来处理 json数据。Json解析网站:
https://www.sojson.com/simple_json.html
2.6 threading
通过使用threading模块生成线程。直接继承自threading.Thread类。进而重新编写初始化函数和运行函数。
三、方法实例
3.1 get方法实例
demo_get.py

3.2 post方法实例
demo_post.py

3.3 添加代理
demo_proxies.py

3.4 获取ajax类数据实例
demo_ajax.py

3.5 使用多线程实例
demo_thread.py
四、爬虫框架
4.1 Srcapy框架
Scrapy基于纯Python开发,并旨在用于抓取网页信息并解析结构化数据的应用框架具有极广泛的使用领域。
Scrapy 基于 Twisted['twɪstɪd](其竞争对手之一是Tornado)提供的异步通信机制来处理网络数据传输。该解决方案能够显著提高下载速度效率,并且无需自行开发异步通信模块。同时它还提供了多种功能组件以满足多种应用需求。
4.2 Scrapy架构图

4.3 Scrapy主要组件
Scrapy Engine(引擎):负责协调 spider 之间的通信以及信息传递过程。
Scheduler(调度器):它主要处理引擎发来的请求,并按照特定规则对请求进行分类和排序。该调度器将请求加入队列中以待处理,并在引擎激活或需要服务时从队列中取出相应的请求提供服务。
Downloader(下载器):主要负责处理Scrapy Engine(引擎)所发送的所有Requests请求,并收集所有来自这些请求的结果反馈,并将其返回给Scrapy Engine(引擎)。这些结果最终将被蜘蛛用来执行任务
Spider(爬虫):它负责管理所有的Respon ses,并从每个响应中解析提取相关信息,并将其相关链接信息传递给引擎,在再次进入Scheduler(调度器)时完成任务,
Item Pipeline(管道):它承担处理Spider中获取到的Item的任务,并完成展开深入分析、筛选以及存储等相关操作的地方。
Downloader Middleware(下载中间件):类似于一个定制化地增强下载能力的组件。
Spider Middlewares(Spider中间件):你可以说它是一个具备自定义扩展能力,并能够进行管理的组件(例如,在接收来自Spiders应用的响应请求时发挥作用,并在发送新的请求给外部系统时处理相应的业务逻辑)。
4.4 Scrapy的运作流程
引擎:Hi!Spider, 你要处理哪一个网站?
Spider:老大要我处理xxxx.com。
引擎:你把第一个需要处理的URL给我吧。
Spider:给你,第一个URL是xxxxxxx.com。
引擎:Hi!调度器,我这有request请求你帮我排序入队一下。
调度器:好的,正在处理你等一下。
引擎:Hi!调度器,把你处理好的request请求给我。
调度器:给你,这是我处理好的request
引擎
下载器:请给你提供这个下载项已完成。(如果失败`抱歉这个 request download failed.然后引擎告知调度器该 request download failed.你记录下来我们待后重新尝试)
引擎
Spider:(完成后续的数据处理并对相应的URL地址负责),通知 引擎 吗?我这里有两个结果反馈给我,请问您提到的那个 URL 是指什么?对应的URL地址是什么?另外,请您确认一下您所提到的数据项列表是否正确?
引擎发出指令
管道``调度器:好的,现在就做!
4.5 制作Scrapy爬虫4步曲
| 1 | 新建爬虫项目 | scrapy startproject mySpider |
|---|---|---|
| 2 | 明确目标 (编写items.py) | 打开mySpider目录下的items.py |
| 3 | 制作爬虫 (spiders/xxspider.py) | scrapy genspider gushi365 "gushi365.com" |
| 4 | 存储内容 (pipelines.py) | 设计管道存储爬取内容 |
五、常用工具
5.1 fidder
fidder是一款抓包工具,主要用于手机抓包。
5.2 XPath Helper
XPath Helper插件是一款零成本的Chrome爬虫网页解析工具。它特别适合那些在定位XPath路径时遇到困难的用户。
谷歌浏览器插件xpath helper 的安装和使用:
https://jingyan.baidu.com/article/1e5468f94694ac484861b77d.html
六、分布式爬虫
6.1 scrapy-redis
Scrapy-Redis旨在更加便捷地支持Scrapy分布式爬取功能,并集成了一系列基于Redish服务的组件(pip install scrapy-redis)
github网站:https://github.com/rolando/scrapy-redis
6.2 分布式策略
Master 端(核心服务器):构建一个Redis数据库系统,并非用于数据爬取操作;而是专注于URL指纹识别与去重、请求流量的分配与调度以及数据存储与管理。
Slaver端:负责处理爬虫请求,在运行过程中向Master提交新的请求
包含以下内容:
• 干货满满!
• 通过10分钟掌握Python基础并快速上手开发!
• 本文深入解析Python网络编程的基本概念与常见模块,
• 同时也会介绍核心操作方法及实用工具,
• 最后还会涵盖各种主流的Python爬虫框架以及分布式爬虫技术!

干货 | 十分钟带你从入门到进阶python爬虫
实用技巧 | 简明扼要:新手到高手Python爬虫教学
