网页抓取更侧重于将网络上的非结构化数据(常见的是HTML格式)转换成为能在一个中央数据库中储存和分析的结构化数据。
需要具备一定的前端知识,最起码应该能大概看懂网页内容,像基本的html元素,css样式,javascript等,不要求熟练掌握,这些是最基础的东西。
一、基本要掌握的8个知识点
1、爬虫原理了解
互联网就是一张大网,而爬虫(即网络爬虫)便是在网上爬行的蜘蛛。
如果把网的节点比作一个个网页,爬虫爬到这就相当于访问了该页面,获取了其信息,可以把节点间的连线比作网页与网页之间的链接关系。
爬虫首先要做的工作就是获取网页,这里就是获取网页的源代码。
获取网页源代码后,接下来就是分析网页源代码,从中提取我们想要的数据。
提取信息后,我们可以简单保存为 TXT 文本或 JSON 文本,也可以保存到数据库,如 MySQL 和 MongoDB 等,还可保存至远程服务器。
2、Python学习
可以去网上找一些教学视频、入门学习教程等等,去看一下,然后有基础了之后还可以找一些进阶的学习视频,再打打基础。
3、HTML了解
了解网页的结构,内容等,帮助后续的数据爬取。
HTML被称为超文本标记语言,有着一系列的标签,这些标签的组合可以显示出文字,图片,视频等内容。
我们平时访问的网页,就是通过html编写的。
想要看到平常的网页,就需要为文档添加css样式,如果想要添加动画效果,图片能够自动播放或者点击出现一些反馈,这就需要用到JavaScript来编写脚本。
常用的HTML标签:
4、TCP/IP协议
了解在网络请求和网络传输上的基本原理,帮助今后写爬虫的时候理解爬虫的逻辑。
5、JavaScript
简称为js,js的运行需要靠浏览器来运行。
它是一种脚本语言,具有即时编译的特点,js可以做一些动态的操作,比如添加一个元素,改变元素的内容,改变css样式。
-
JavaScript 渲染页面
现在网页越来越多地采用 Ajax、前端模块化工具来构建,整个网页可能都是由 JavaScript 渲染出来的,也就是说原始的 HTML 代码就是一个空壳。
网页请求这个js文件,获取到该文件后,便会执行其中的 JavaScript 代码,而 JavaScript 则会改变 HTML 中的节点,向其添加内容,最后得到完整的页面。
对于,可以通过selenium或者找到Ajax的请求地址就可以解决。
6、CSS
css能够对网页中的各种元素(即我们提到的HTML标签),我们可以通过它来设置背景颜色,设置元素的大小位置,设置字体的排版等等。
-
选择器
在 CSS 中,我们使用 CSS 选择器来定位节点。
例如,代码中div节点的id为container,那么就可以表示为#container,其中#开头代表选择id,其后紧跟id的名称。
如果我们想选择class为wrapper的节点,便可以使用.wrapper。
这里以点(.)开头代表选择class(我的记法是:点class,#为number的简称代表id),其后紧跟class的名称。
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>This is a Demo</title> </head> <body> <div id="container"> <div class="wrapper"> <h2 class="title">Hello World</h2> <p class="text">Hello, this is a paragraph.</p> </div> </div> </body></html>
另外,还有一种选择方式,那就是根据标签名筛选。
例如想选择二级标题,直接用h2即可,这是最常用的3种表示,分别是根据id、class、标签名筛选,请牢记它们的写法。
7、加 密
爬取网站的时候,经常会遇到各种各样类似加密的情形,比如:字体加密,构造参数加密。
想要抓取就必须要懂得找到对应的js文件,研究这些参数是怎么构造的,现在对于更多更全的信息都是通过 App 来展示的。
一些 App 在内部实现的时候对代理加了一些校验,如绕过系统代理直接连接或者检测到了使用了代理,直接拒绝连接。
这需要考虑使用 Wireshark、Tcpdump 在更底层的协议上抓包。
8、抓包分析
要会进行抓包分析,会使用浏览器自带的开发者工具。
网页中有些数据是动态加载的,只在请求网页时才加载数据,在网页源码中是不显示的,所以你需要会进行抓包分析,解析json数据等。
我们经常模拟登录时,也需要进行抓包分析,需要post提交哪些内容等,只有在抓包分析后,才能构建相关提交数据:
其次就是要梳理一下爬虫的思路;
简单的说,就是你想要抓取一个网站的内容时,需要怎么一步步做好,需要现有一个大的整体的架构,才能进一步做好接下来的工作。
二、其他需要注意的
检查robots.txt
许多网站会将爬取规则和限制写在 robots.txt 里,这个文件通常是在根域名下,这个文件就是给 网络爬虫 来了解爬取该网站时存在哪些限制。
Q:如何查看这个 robots.txt 文件?
A:你只需要在 目标网站站点域名 后面加上 robots.txt 即可。
robots.txt 里一般会规定哪些网页不允许被自动抓取,或者限定某个页面被机器人访问的频率。
虽然大部分人不理会这些,但还是要先看一看它的内容,我们还是尽量遵守robots.txt 文件里面的要求为好。
不管什么用户,两次爬取请求之间的间隔时间不可以小于 5秒钟,否则你访问的这个网站会将网页自动跳整到 /trap 链接。
也就是说:网站服务器封禁了你的IP,如果你行为恶劣,可能会对你的IP封禁更长的时间,甚至是永久封禁!
小心HTML里的坑
HTML 标签中可能包含 id 或 class,或二者兼有。
HTML id 是一个独一无二的标记,而 HTML class 可能在多个元素中被重用。
class 名或元素内容可能会改变,而这种改变可能会让你的代码崩溃,或是返回错误的结果。
一般来说,有两种办法避免这种情况出现:
① 采用 id 来获取元素内容,而不是 class,因为 id 一般来说不那么容易改变。
② 记得检查返回值,如果返回了 None,那很可能有什么地方出了问题。
不过,因为有一些 class 可能并不总是出现,相关的元素并不一定在每个列表中都有,所以你需要统计某个元素在所有列表中出现的比例。
比如计算返回 None 的次数;
如果每次都返回 None,那也许你需要检查代码或者是 HTML 源码,看看是不是这个元素在网站的 HTML 中就已经改变了。
对User agent伪装
每当你访问一个网站时,网站都会通过浏览器的 user agent 获取到你的浏览器信息。
有些网站如果没收到 user agent 信息,就不会返回任何内容,还有些网站会根据不同的 user agent,给不同的浏览器提供不同的内容。
网站并不会阻止正常用户的访问,但如果你用同一个 user agent 发起每秒 200 次的请求,这就有问题了吧?
可以通过 user_agent 库,产生(几乎是)随机的 user agent,也可以自定义一个特殊的 user agent。
是否被屏蔽了?
如果你拿到的返回值经常是 404(找不到页面)、403(被禁止)、408(访问超时),就应该考虑你是不是被这个站点屏蔽了。
防止被禁掉
短时间内频繁的访问服务器,很有可能会被服务器识别为爬虫,禁掉IP。
这个时候你就需要使用IP代理池等,尽可能不被服务器发现。
检查网站地图
网站提供的 Sitemap 文件(即 网站地图),它提供了网站站点里面所有页面的链接,它们组成了这个 Sitemap 文件。
我们无须爬取某个网站站点里面的每一个网页,网站提供的 Sitemap 文件 帮助了我们的网络爬虫定为网站最新的内容。
虽然Sitemap文件提供了一种爬取网站的有效方式,但是我们仍需要对其谨慎处理。
因为该文件经常存在缺失、过期或者不完整的问题。
存储数据
爬取下来的数据,如果数据量大的话,就需要了解一些常用的数据库的使用,像mysql,mongodb等,方便查询也方便管理。
爬虫框架
最后就是学一些爬虫常用的框架;
可以明显提高开发效率,避免重复造轮子,像python的开源爬虫框架scrapy等,使用起来也更快捷。
觉得本篇内容有帮助的话可以前往本人主页了解更多技术干货,内容详细丰富,或是前往公众号【Python编程学习圈】了解更多技术内容,领取资料高效学习。
神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试