我从五个方面介绍了利用 Python 进行网络爬虫开发的相关知识点和技巧:

  1. 抓取
  2. 解析
  3. 存储
  4. 反爬
  5. 加速

目录

一、爬取

爬取的目标可以大致分为两类:网页、APP

对于网页,可以分为两种类别,即

  • 服务端渲染
  • 客户端渲染

对于APP,可以分为四类,即

  • 普通接口
  • 加密参数接口
  • 加密内容接口
  • 非常规协议接口

(一)网页爬取

服务端渲染

对于服务端渲染,用一些基本的HTTP请求库就可以实现爬取,如 urllib、urllib3、pycurl、hyper、requests、grab 等框架,其中应用最多的可能就是 requests 了。

客户端渲染

对于客户端渲染,有四种处理方法:

  • 寻找Ajax接口
  • 此种情形可以直接使用 Chrome/Firefox 的开发者工具直接查看 Ajax 具体的请求方式、参数等内容,然后用 HTTP 请求库模拟即可,另外还可以通过设置代理抓包来查看接口,如 Fiddler/Charles。
  • 模拟浏览器执行
  • 此种情形适用于网页接口和逻辑较为复杂的情况,可以直接以可见即可爬的方式进行爬取,如可以使用 Selenium、Splinter、Spynner、pyppeteer、PhantomJS、Splash、requests-html 等来实现。
  • 直接提取JavaScript数据
  • 此种情形适用于真实数据没有经过 Ajax 接口获取,而是直接包含在 HTML 结果的某个变量中,直接使用正则表达式将其提取即可。
  • 模拟执行JavaScript
  • 某些情况下直接模拟浏览器执行效率会偏低,如果把 JavaScript 的某些执行和加密逻辑摸清楚了,可以直接执行相关的 JavaScript 来完成逻辑处理和接口请求,比如使用 Selenium、PyExecJS、PyV8、js2py 等库来完成即可。

(二)APP爬取

对于APP的爬取分为四种情况:

  • 普通无加密接口
  • 直接抓包拿到接口的具体请求形式就好,可用的抓包工具有 Charles、Fiddler、mitmproxy。
  • 加密参数接口
  • 一种方法可以实时处理,例如 Fiddler、mitmdump、Xposed 等,另一种方法是将加密逻辑破解,直接模拟构造即可,可能需要一些反编译的技巧。
  • 加密内容接口
  • 即接口返回结果完全看不懂是什么东西,可以使用可见即可爬的工具 Appium,也可以使用 Xposed 来 hook 获取渲染结果,也可以通过反编译和改写手机底层来实现破解。
  • 非常规协议
  • 可以使用 Wireshark 来抓取所有协议的包,或者使用 Tcpdump 来进行 TCP 数据包截获。

二、解析

对于 HTML 类型的页面来说,常用的解析方法其实无非那么几种,正则、XPath、CSS Selector,另外对于某些接口,常见的可能就是 JSON、XML 类型,使用对应的库进行处理即可。

这些规则和解析方法其实写起来是很繁琐的,如果我们要爬上万个网站,如果每个网站都去写对应的规则,那么不就太累了吗?所以智能解析便是一个需求。智能解析意思就是说,如果能提供一个页面,算法可以自动来提取页面的标题、正文、日期等内容,同时把无用的信息给刨除。

三、存储

存储,即选用合适的存储媒介来存储爬取到的结果

进击的Coder

四、反爬虫

爬虫现在已经越来越难了,非常多的网站已经添加了各种反爬措施,在这里可以分为非浏览器检测、封 IP、验证码、封账号、字体反爬等。

(一)防封IP

(二)验证码

验证码分为非常多种,如普通图形验证码、算术题验证码、滑动验证码、点触验证码、手机验证码、扫二维码等。

  • 对于普通图形验证码,如果非常规整且没有变形或干扰,可以使用 OCR 识别,也可以使用机器学习、深度学习来进行模型训练,当然打码平台是最方便的方式。
  • 对于算术题验证码,推荐直接使用打码平台。
  • python学习关注加群:839383 765 获取最新python入门学习资料及视频哦。
  • 对于滑动验证码,可以使用破解算法,也可以模拟滑动。后者的关键在于缺口的找寻,可以使用图片比对,也可以写基本的图形识别算法,也可以对接打码平台,也可以使用深度学习训练识别接口。
  • 对于点触验证码,推荐使用打码平台。
  • 对于手机验证码,可以使用验证码分发平台,也可以购买专门的收码设备,也可以人工验证。
  • 对于扫二维码,可以人工扫码,也可以对接打码平台。

(三)防封号

一些网站需要登录才能爬取,但是一个账号登录之后请求过于频繁会被封号,为了避免封号,可以采取如下措施:

五、加速

当爬取的数据量非常大时,如何高效快速地进行数据抓取是关键。常见的措施有多线程、多进程、异步、分布式、细节优化等。

(一)多线程、多进程

爬虫是网络请求密集型任务,所以使用多进程和多线程可以大大提高抓取效率,如使用 threading、multiprocessing 等。

(二)异步

将爬取过程改成非阻塞形式,当有响应式再进行处理,否则在等待时间内可以运行其他任务,如使用 asyncio、aiohttp、Tornado、Twisted、gevent、grequests、pyppeteer、pyspider、Scrapy 等。

(三)分布式

分布式的关键在于共享爬取队列,可以使用 celery、huey、rq、rabbitmq、kafka 等来实现任务队列的对接,也可以使用现成的框架 pyspider、Scrapy-Redis、Scrapy-Cluster 等。

(四) 优化

(五)架构

好了,更多爬虫内容记得关注我们哦!

爬虫模拟登陆手机验证码_网络爬虫干货总结,这次比较全面!相关推荐

  1. 爬虫模拟登陆手机验证码_爬虫入门到精通-headers的详细讲解(模拟登录知乎)...

    本文章属于爬虫入门到精通系统教程第七讲 直接开始案例吧. 本次我们实现如何模拟登陆知乎. 1.抓包 1. 首先打开知乎登录页 知乎 - 与世界分享你的知识.经验和见解 注意打开开发者工具后点击&quo ...

  2. 爬虫模拟登陆手机验证码_Python+scrapy爬虫之模拟登陆

    一.126,163邮箱模拟登陆 # -*- coding:utf-8 -*-import timefrom selenium import webdriverdef login126_or_163em ...

  3. python爬虫设计在哪里_《python 爬虫教程 知乎》 怎样用Python设计一个爬虫模拟登陆知乎...

    <python 爬虫教程 知乎> 怎样用Python设计一个爬虫模拟登陆知乎 python 爬虫教程 知乎2020-09-23 01:45:13人已围观 怎样用Python设计一个爬虫模拟 ...

  4. python 突破b站验证码_Python爬虫模拟登陆哔哩哔哩(bilibili)并突破点选验证码功能...

    写在前面 今天带给大家一个突破点选验证码的案例,利用爬虫模拟登陆哔哩哔哩,并且把一些采坑的地方给大家强调一下! 一.需求分析 模拟登陆哔哩哔哩 网站链接: https://passport.bilib ...

  5. python实用脚本 知乎_Python 爬虫模拟登陆知乎

    在之前写过一篇使用python爬虫爬取电影天堂资源的文章,重点是如何解析页面和提高爬虫的效率.由于电影天堂上的资源获取权限是所有人都一样的,所以不需要进行登录验证操作,写完那篇文章后又花了些时间研究了 ...

  6. 基于python的网络爬虫开题报告_网络爬虫开题报告.docx

    网络爬虫开题报告 网络爬虫开题报告 篇一:毕设开题报告 及开题报告分析 开题报告如何写 注意点 1.一.对指导教师下达的课题任务的学习与理解 这部分主要是阐述做本课题的重要意义 2.二.阅读文献资料进 ...

  7. 网易微专业python爬虫工程师一期多久_微专业-Python爬虫工程师 – 3个月成为网络爬虫工程师...

    [2020最新]Python爬虫工程师 – 3个月成为网络爬虫工程师 课程简介 1.平均薪资高 入行爬虫工程师薪资可达15w高级爬虫工程师薪资可达30w

  8. Python爬虫工程师 3个月成为网络爬虫工程师

    攻城狮整理网易云课堂<Python爬虫工程师 3个月成为网络爬虫工程师> 1.平均薪资高 入行爬虫工程师薪资可达15w 高级爬虫工程师薪资可达30w 2.入行门槛低 从事爬虫工程师职位最多 ...

  9. python编写爬虫的步骤-python学习: 写网络爬虫程序的三个难点

    写爬虫,是一个非常考验综合实力的活儿.有时候,你轻而易举地就抓取到了想要的数据:有时候,你费尽心思却毫无所获. 好多Python爬虫的入门教程都是一行代码就把你骗上了"贼船",等上 ...

最新文章

  1. java表达式类型自动提升
  2. 《数据中台实战》:如何通过标签平台圈出产品高价值用户?
  3. 突破Outlook2003附件格式限制
  4. pixhawk commander.cpp的飞行模式切换解读
  5. Vista Dynamips模拟器安装
  6. CF1237F Balanced Domino Placements(组合计数,dp)
  7. 如何创建比C语言更快的编程语言?
  8. vue 解决: *!!vue-style-loader!css-loader?{“sourceMap“:true}!../../../../vue-loader
  9. 校验码(海明校验,CRC冗余校验,奇偶校验)
  10. 《SpringCloud超级入门》使用Eureka集群搭建《十三》
  11. 2022年中国在线视频行业研究报告
  12. Asp.netMVC中Html.Partial,RenderPartial,Action,RenderAction区别和用法
  13. Google 又逆天:语音输入离线实时输出文字,仅占 80 MB !然而……
  14. K-periodic Garland
  15. 基于SpringBoot生鲜商城
  16. LeetCode——剑指 Offer 38. 字符串的排列
  17. IO流-节点流和处理流(涵盖底层调用关系)
  18. Unity win平台 调整窗口大小强制固定比例
  19. 使用javascript实现表单校验(聚焦onfocus()和离焦onblur()以及在指定位置输出innerHTML='')
  20. UE4 创建自定义动画节点

热门文章

  1. 有小数点是什么类型_为什么0.1+0.2不等于0.3?原来编程语言是这么算的……
  2. docker centos7_centos7-yum部署docker
  3. 1.2.2 OSI参考模型(应用层、表示层、会话层、传输层、网络层、数据链路层、物理层)
  4. php版 v2.0,KangPHP v2.0 正式版
  5. Tcp连接arp协议详解
  6. 数据库 / 事务的 ACID
  7. C语言中在常数后面加U、L、F的功能
  8. 平板电脑显示服务器繁忙,微信公众平台微信保护-微信公众平台登陆系统繁忙是什么原因登陆的时候有个微信扫描认证?微 爱问知识人...
  9. 百度App Objective-C/Swift 组件化混编之路(一)
  10. 10 大流行软件测试工具