Python爬虫知识点梳理

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介:

学任何一门技术,都应该带着目标去学习,目标就像一座灯塔,指引你前进,很多人学着学着就学放弃了,很大部分原因是没有明确目标,所以,在你准备学爬虫前,先问问自己为什么要学习爬虫。有些人是为了一份工作,有些人是为了好玩,也有些人是为了实现某个黑科技功能。不过可以肯定的是,学会了爬虫能给你的工作提供很多便利。

作为零基础小白,大体上可分为三个阶段去实现,第一阶段是入门,掌握必备基础知识,比如Python基础、网络请求的基本原理等,第二阶段是模仿,跟着别人的爬虫代码学,弄懂每一行代码,熟悉主流的爬虫工具,第三阶段是自己动手,到了这个阶段你开始有自己的解题思路了,可以独立设计爬虫系统。

爬虫涉及的技术包括但不限于熟练一门编程语言(这里以 Python 为例) HTML 知识、HTTP 协议的基本知识、正则表达式、数据库知识,常用抓包工具的使用、爬虫框架的使用、涉及到大规模爬虫,还需要了解分布式的概念、消息队列、常用的数据结构和算法、缓存,甚至还包括机器学习的应用,大规模的系统背后都是靠很多技术来支撑的。数据分析、挖掘、甚至是机器学习都离不开数据,而数据很多时候需要通过爬虫来获取,因此,即使把爬虫作为一门专业来学也是有很大前途的。

那么是不是一定要把上面的知识全学完了才可以开始写爬虫吗?当然不是,学习是一辈子的事,只要你会写 Python 代码了,就直接上手爬虫,好比学车,只要能开动了就上路吧,写代码可比开车安全多了。

用 Python 写爬虫,首先需要会 Python,把基础语法搞懂,知道怎么使用函数、类、list、dict 中的常用方法就算基本入门。接着你需要了解 HTML,HTML 就是一个文档树结构,网上有个 HTML 30分钟入门教程 https://deerchao.net/tutorials/html/html.htm 够用了。然后是关于 HTTP 的知识,爬虫基本原理就是通过网络请求从远程服务器下载数据的过程,而这个网络请求背后的技术就是基于 HTTP 协议。作为入门爬虫来说,你需要了解 HTTP协议的基本原理,虽然 HTTP 规范用一本书都写不完,但深入的内容可以放以后慢慢去看,理论与实践相结合。

网络请求框架都是对 HTTP 协议的实现,比如著名的网络请求库 Requests 就是一个模拟浏览器发送 HTTP 请求的网络库。了解 HTTP 协议之后,你就可以专门有针对性的学习和网络相关的模块了,比如 Python 自带有 urllib、urllib2(Python3中的urllib),httplib,Cookie等内容,当然你可以直接跳过这些,直接学习 Requests 怎么用,前提是你熟悉了 HTTP协议的基本内容,数据爬下来,大部分情况是 HTML 文本,也有少数是基于 XML 格式或者 Json 格式的数据,要想正确处理这些数据,你要熟悉每种数据类型的解决方案,比如 JSON 数据可以直接使用 Python自带的模块 json,对于 HTML 数据,可以使用 BeautifulSoup、lxml 等库去处理,对于 xml 数据,除了可以使用 untangle、xmltodict 等第三方库。

爬虫工具里面,学会使用 Chrome 或者 FireFox 浏览器去审查元素,跟踪请求信息等等,现在大部分网站有配有APP和手机浏览器访问的地址,优先使用这些接口,相对更容易。还有 Fiddler 等代理工具的使用。

入门爬虫,学习正则表达式并不是必须的,你可以在你真正需要的时候再去学,比如你把数据爬取回来后,需要对数据进行清洗,当你发现使用常规的字符串操作方法根本没法处理时,这时你可以尝试了解一下正则表达式,往往它能起到事半功倍的效果。Python 的 re 模块可用来处理正则表达式。这里也推荐一个教程:Python正则表达式指南 https://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html

数据清洗完最终要进行持久化存储,你可以用文件存储,比如CSV文件,也可以用数据库存储,简单的用 sqlite,专业点用 MySQL,或者是分布式的文档数据库 MongoDB,这些数据库对Python都非常友好,有现成的库支持,你要做的就是熟悉这些 API 怎么使用。

从数据的抓取到清洗再到存储的基本流程都走完了,也算是基本入门了,接下来就是考验内功的时候了,很多网站都设有反爬虫策略,他们想方设法阻止你用非正常手段获取数据,比如会有各种奇奇怪怪的验证码限制你的请求操作、对请求速度做限制,对IP做限制、甚至对数据进行加密操作,总之,就是为了提高获取数据的成本。这时你需要掌握的知识就要更多了,你需要深入理解 HTTP 协议,你需要理解常见的加解密算法,你要理解 HTTP 中的 cookie,HTTP 代理,HTTP中的各种HEADER。爬虫与反爬虫就是相爱相杀的一对,道高一次魔高一丈。如何应对反爬虫没有既定的统一的解决方案,靠的是你的经验以及你所掌握的知识体系。这不是仅凭21天入门教程就能达到的高度。

进行大规模爬虫,通常都是从一个URL开始爬,然后把页面中解析的URL链接加入待爬的URL集合中,我们需要用到队列或者优先队列来区别对待有些网站优先爬,有些网站后面爬。每爬去一个页面,是使用深度优先还是广度优先算法爬取下一个链接。每次发起网络请求的时候,会涉及到一个DNS的解析过程(将网址转换成IP)为了避免重复地 DNS 解析,我们需要把解析好的 IP 缓存下来。URL那么多,如何判断哪些网址已经爬过,哪些没有爬过,简单点就是是使用字典结构来存储已经爬过的的URL,但是如果碰过海量的URL时,字典占用的内存空间非常大,此时你需要考虑使用 Bloom Filter(布隆过滤器),用一个线程逐个地爬取数据,效率低得可怜,如果提高爬虫效率,是使用多线程,多进程还是协程,还是分布式操作。


转自:https://mp.weixin.qq.com/s?__biz=MjM5MzgyODQxMQ==&mid=2650367313&idx=1&sn=85f7e54a623c626ddb2605df5156a7c3&chksm=be9cde0589eb5713b36ada31389e4f35439a44b4fd0f852c4acfb3e4f8594ae4ff21824724e0&scene=21#wechat_redirect

目录
相关文章
|
10天前
|
数据采集 存储 JavaScript
构建你的第一个Python网络爬虫
【9月更文挑战第34天】在数字信息泛滥的时代,快速有效地获取和处理数据成为一项重要技能。本文将引导读者通过Python编写一个简易的网络爬虫,实现自动化地从网页上抓取数据。我们将一步步走过代码的编写过程,并探讨如何避免常见陷阱。无论你是编程新手还是想扩展你的技术工具箱,这篇文章都将为你提供有价值的指导。
58 18
|
6天前
|
数据采集 存储 数据处理
Python爬虫-数据处理与存储(一)
Python爬虫-数据处理与存储(一)
24 0
|
10天前
|
数据采集 存储 数据挖掘
深入探索 Python 爬虫:高级技术与实战应用
本文介绍了Python爬虫的高级技术,涵盖并发处理、反爬虫策略(如验证码识别与模拟登录)及数据存储与处理方法。通过asyncio库实现异步爬虫,提升效率;利用tesseract和requests库应对反爬措施;借助SQLAlchemy和pandas进行数据存储与分析。实战部分展示了如何爬取电商网站的商品信息及新闻网站的文章内容。提醒读者在实际应用中需遵守法律法规。
131 66
|
2天前
|
数据采集 JSON 算法
Python爬虫——基于JWT的模拟登录爬取实战
Python爬虫——基于JWT的模拟登录爬取实战
12 1
Python爬虫——基于JWT的模拟登录爬取实战
|
2天前
|
数据采集 JSON 算法
Python爬虫——模拟登录
Python爬虫——模拟登录
34 3
|
2天前
|
数据采集 JavaScript 前端开发
JavaScript逆向爬虫——使用Python模拟执行JavaScript
JavaScript逆向爬虫——使用Python模拟执行JavaScript
11 2
|
2天前
|
数据采集 前端开发 NoSQL
Python编程异步爬虫实战案例
Python编程异步爬虫实战案例
11 2
|
5天前
|
数据采集 XML 数据格式
Python爬虫--xpath
Python爬虫--xpath
11 1
|
5天前
|
数据采集 Python
Python爬虫-爬取全国各地市的邮编链接
Python爬虫-爬取全国各地市的邮编链接
17 1
|
14天前
|
数据采集 存储 XML
构建高效的Python爬虫系统
【9月更文挑战第30天】在数据驱动的时代,掌握如何快速高效地获取网络信息变得至关重要。本文将引导读者了解如何构建一个高效的Python爬虫系统,从基础概念出发,逐步深入到高级技巧和最佳实践。我们将探索如何使用Python的强大库如BeautifulSoup和Scrapy,以及如何应对反爬措施和提升爬取效率的策略。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的知识和技能,帮助你在信息收集的海洋中航行得更远、更深。
39 6