python爬虫进阶——python爬虫优化

2021-06-03 09:32:23 浏览数 (3341)

在阅读完小编的这篇文章后(怎么用python爬数据?python爬虫基础介绍!),相信肯定有小伙伴在抱怨“这写的啥啊,正则表达式完全看不懂啊?”这种话。其实小编是故意的,虽然现在能用的工具那么多,正则表达式是比较不常用的那种,但正则表达式是比较容易理解的(其他方法可能需要学习一些 XML 的知识)。不过接下来,小编要介绍的,就是一系列爬虫开发的优化(包括如何不用正则表达式)。各位小伙伴们赶紧上车,开始 python 爬虫优化之路吧。

使用header

这是一个很重要的知识,在进行页面请求的时候,请求头里面会有一些信息。如果使用爬虫的时候,默认是没有这些信息的(所以服务器一看到请求头里没有相关信息,一下子知道你是爬虫了)。有些服务器不会给这种请求返回响应(也就是比较简单的反爬虫)。其实在使用 request 进行页面获取的时候,​get()​ 方法可以传入一个 header。只要在 header 里面存进去相应的浏览器请求头信息,爬虫就可以伪装成浏览器,这样服务器就会正常的返回响应。

Request库

有些爬虫使用的是 python 自带的 urllib 库进行爬虫开发(小编的上一篇文章直接用的 request 库),这个自带的库是很强大的。不过,request 库,比 urllib 库更加强大,可以用更少的代码来进行模拟浏览器操作。

Beautiful Soup库

这是一个高效的网页(xml)解析库,可以从 HTML 或者 XML 中提取数据。使用这个库可以简单快速的进行数据 html 数据定位和提取,如果会使用 css 选择器,甚至可以结合 css 选择器进行使用。有了他,基本就可以告别正则匹配了。

Selenium库

这是一个自动化测试经常会涉及到的库。这个库可以通过模拟用户操作来进行对浏览器的控制。爬虫也可以利用这个库来进行对浏览器的控制和获取数据。不过因为使用 Selenium 必须要打开浏览器运行,所以相较于不使用 Selenium 的爬虫会比较笨拙且速度较慢。不过他因为他直接操作浏览器,所以不需要进行浏览器伪装,有些数据在爬取的时候要求用户有一定的操作,这种情况也只有 Selenium 能胜任·。

使用多线程

单线程的爬虫就像一个人干活,终究是干不过多线程的。使用多线程,可以让你的爬虫爬取速度得到极大的提升。

使用ip代理

前面介绍了 header,有些服务器为了防止爬虫(特别是经过浏览器伪装的爬虫),会对相同 ip 地址的请求进行处理(当短时间内同一 ip 对服务器进行多次请求时会拒绝请求),这时候就要学会使用 ip 代理池伪装你的 ip 地址来绕过这一检测机制。

使用Cookie

在遇到需要登陆的情况时,可以使用 Cookie 来进行登陆。

注:登陆情况也可以使用 Selenium 去自动化登陆,或者使用表单形式请求服务器。

数据储存

这分成三种情况,没有梦想的咸鱼可以直接将数据使用内置的文件函数保存成文本文件。

想要把数据保存成 csv 格式的,可以了解一下这个库—csv 库。这个库可以读写 csv 文件,把文件保存成这种格式可以使用 Excel 打开这种数据,表格化的数据更加直观。

想要把数据保存进数据库的,可以使用 pymysql 库。这个库可以进行数据库的操作,把文件存入数据库更易于管理,而且也方便其他应用的调用。

爬虫框架—scrapy

与其他语言一样,某些技术整合起来,就能成为一个框架。爬虫也有一个这样的框架,那就是 scrapy。使用这个框架可以更快速的进行爬虫的开发。刚巧 W3Cschool 上有scrapy框架学习视频,感兴趣的小伙伴可以前往学习。

小结

在学会了上面的技术和库的使用后,可以对爬虫开发进行优化,也能提高 python 爬虫的开发速度。如果小伙伴们真的对爬虫感兴趣的话可以对上面提到的技术和工具进行深入研究。文章到这里基本也就结束了,但为了各位小伙伴们能够保护好自己,特地附上小编警告:非法爬取网站数据,会对网站的日常运营造成一定的负担,这种行为也是违法行为,请勿恶意爬取别人的网站数据,在 python 爬虫的学习过程中也尽量少用较高次数的循环语句进行爬取!另外有些信息是不能去爬取的(比如个人信息这类),法律红线不能碰!