专栏首页程序员的知识天地Python爬虫开发的3大难题,别上了贼船才发现,水有多深

Python爬虫开发的3大难题,别上了贼船才发现,水有多深

写爬虫,是一个非常考验综合实力的活儿。有时候,你轻而易举地就抓取到了想要的数据;有时候,你费尽心思却毫无所获。

好多Python爬虫的入门教程都是一行代码就把你骗上了“贼船”,等上了贼船才发现,水好深~ 比如爬取一个网页可以是很简单的一行代码:

r = requests.get('http://news.baidu.com')

非常的简单,但它的作用也仅仅是爬取一个网页,而一个有用的爬虫远远不止于爬取一个网页

一个有用的爬虫,只需两个词来衡量:

  • 数量:能否抓全所有该类数据
  • 效率:抓完所有数据需要多久一天还是一个月

但要做到这两个词,却是要下很多功夫。自己下功夫是一方面,也很重要的是你要抓全的目标网站给你出了多少难题。综合起来,就写一个爬虫有多少难度。

网络爬虫难度一:只需爬取html网页但要上规模

这里我们举个新闻爬虫的例子。大家都用过百度的新闻搜索吧,我就拿它的爬虫来讲讲实现上的难度。

新闻网站基本上不设防,新闻内容都在网页的html代码里了,抓全一个网页基本上就是一行的事情。似乎听上去很简单,但对于一个搜索引擎级的爬虫,就不那么简单了,要把几千几万家新闻网站的新闻都及时抓取到也不是一件容易的事情。

我们先看看新闻爬虫的简单流程图:

从一些种子网页开始,种子网页往往是一些新闻网站的首页,爬虫抓取网页,从中提取网站URL放到网址池再进行抓取。这样就从几个网页开始,不断扩展到其它网页。爬虫抓取的网页也越来越多,提取出的新网网址也会成几何级数增长。

如何能在最短时间抓取更多网址?

这就是其中一个难度,这不是目标网址带来的,而是对我们自身自愿的考验:

  • 我们的带宽够吗
  • 我们的服务器够吗,单台不够就要分布式

如何能及时抓取到最新的新闻?

这是效率之外的另一个难度,如何保证及时性?几千家新闻网站,时刻都在发布最新新闻,爬虫在织网式抓取“旧”新闻的同时,如何兼顾获取“新”新闻呢?

如何存储抓取到的海量新闻?

爬虫织网式的爬取,会把每个网站几年前几十年前的新闻网页都给翻出来,从而获得海量的网页需要存储。就是存储上的难度。

如何清理提取网内容?

从新闻网页的html里面快速、准确提取想要的信息数据,比如标题、发布时间、正文内容等,这又带来内容提取上的难度。

网络爬虫难度二:需要登录才能抓到想要的数据

人是贪婪的,想要的数据无穷尽,但是很多数据不是你轻易就可以获得的。有一大类数据就是需要账户登录后才能看到,也就是说,爬虫请求时必须是登录状态才能抓取数据。

如何获取登录状态?

老猿前面已经说过了,http协议的性质决定了登录状态就是一些cookies,那么如何获得登录状态就是一个非常有难度的问题。 有些网站登录过程很简单,把账户、密码发给服务器,服务器验证通过返回表示已登录的cookies。这样的网站,比较容易实现自动登录,爬虫运行过程全程无需人工干预,你就有更多时间喝茶、聊天、上猿人学看python。

如何处理验证码?

然而,网站们既然要求你登录了,他们就不会这么轻易放过你,要做的更绝才能让小猿们善罢甘休,那就是上验证码! 没错,就是变态的验证码!!作为见多识广的老猿,我还是经常识别不出验证码,惭愧惭愧。

据说,有人雇了一批大妈,进行人工识别验证码;也有,通过图像处理技术,尤其如今火热的深度学习、人工智能的技术,来自动识别验证码。

那么,当你写爬虫时遇到验证码该怎么办?

网络爬虫难度三:ajax异步加载甚至JavaScript解密

前面的两个难度,都是靠我们研究数据加载过程,然后用Python代码可以重现出来,进行抓取的。

而遇到达第三个难度时,研究数据加载过程会让你十分痛苦、近乎崩溃。异步加载流程和服务器来来回回好多次,最后得到的数据还要通过JavaScript解密才能看到,这都是压垮爬虫者的最后一根稻草。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python机器学习工具&库,再也不怕找不到工具了

    用Python搞机器学习、数据科学,需要很多相关的资料,各种库、工具,都是常用、常找、常查的内容。

    一墨编程学习
  • 在线Python环境(Azure Notebooks)

    上文说道了anaconda的安装和使用。对于动手能力较差的小伙伴们来说,安装还是太过麻烦,一出现问题也不知道如何查错,然后就从入门选择放弃。

    罗罗攀
  • python实现爬山算法

    爬山算法会收敛到局部最优,解决办法是初始值在定义域上随机取乱数100次,总不可能100次都那么倒霉。

    kalifa_lau
  • 4 月排行:Python 最流行,Java 还行不行?

    PYPL 发布了 4 月份的编程语言排行榜。PYPL 是非常流行的参考指标,其榜单数据的排名均是根据榜单对象在 Google 上相关的搜索频率进行统计排名

    一墨编程学习
  • 人工智能行业薪酬数据曝光,这是要逼我们学python啊

    人工智能可谓是目前最热门的行业,从走在前沿的科技公司,到努力创新的传统行业,几乎都想把握这个新“风口”。而人工智能的核心就是人才,热门的行业通常意味着工作机会和...

    一墨编程学习
  • TensorFlow从1到2(一)续讲从锅炉工到AI专家

    原来引用过一个段子,这里还要再引用一次。是关于苹果的。大意是,苹果发布了新的开发语言Swift,有非常多优秀的特征,于是很多时髦的程序员入坑学习。不料,经过一段...

    俺踏月色而来
  • python实现模拟退火算法

    kalifa_lau
  • 996.ICU - Python之父在行动

    两天前(4月6日),Python之父范·罗瑟姆在Python官方论坛(https://discuss.python.org)发表了关于中国IT996的帖子(ht...

    SeanCheney
  • Python内核源码解析与C/CPP-API拓展编程(二)类型对象

    在上一篇中我们了解到了 PyObject 这个结构只有两个内容:一个引用计数, 一个类型信息. 但是在现实的编程过程中缺失了一些去区别python每一个类型的信...

    Pulsar-V
  • Python内核源码解析与C/CPP-API拓展编程(一)PyObject

    基于C++的调试对于已经到Python虚拟机中存储起来的字节码命令是无法被观察到的,我们只能把它们解析成AST才能看懂字节码在解释器内存中的状态,所以这里我们借...

    Pulsar-V

扫码关注云+社区

领取腾讯云代金券