为何你的爬虫学着学着还是一爬就废?

你学爬虫多久了?你真的了解爬虫吗?当爬虫爬取出现问题的时候你知道如何处理吗?

如果你回答不出来,或许你真的要好好看看这篇文章了!很多初学者看着网上的教程学,却发现自己还是写不了爬虫。

1、 爬虫先知

首先 我们要知道的是:

1)理论上来讲只要是网页上面能够看到的数据都是可以爬取的;

况且互联网的内容都是人写出来的,不会第一页是a,下一页是5,肯定有规律可寻,这就给人有了爬取的可能。

(因为所有看到的网页上的数据都是由服务器发送到我们电脑上面的,只是有的数据加密过,很难解密)

2)“框架不变”:网站不同,但是原理都类似;

大部分爬虫都是从 发送请求——获得页面——解析页面——下载内容——储存内容 这样的流程来进行,只是用的工具不同。

3)分析页面数据的原则是从简到繁,从易到难;

① 直接通过网页源代码获取

② 分析是否为ajax异步加载

③ 数据是否被加密 js

4)现实中,爬虫面临的问题不少,比如:

  • 页面规则不统一

  • 爬下来的数据处理

  • 反爬虫机制

还有很多类似的各种问题,爬虫虽说简单,但往深了学也是没有止境的(比如搜索引擎等),还是需要一步一步来,一步跨到位是不可能的。

2、 学习路线混乱

缺少合理的学习路径,上来 Python、HTML 各种学,极其容易放弃。

零基础学习Python爬虫路线示例:

1)主要是学习Python的基础知识,做到基本能够掌握Python的程度。

2)了解爬虫的实现原理和技术,包括爬虫实现原理、爬虫抓取网页的详细流程、通用爬虫中网页的分类、通用爬虫相关网站文件、反爬虫应对策略、Python做爬虫的优势等。

这一阶段需要学习爬虫具体是怎样抓取网页的,并对抓取过程中产生的一些问题有所了解。

3)学习网页请求原理,包括浏览网页过程、HTTP网络请求原理、HTTP抓包工具Fiddler。

4)用做抓取网页数据的两个库:urllib和requests。

学习urllib库的基本使用,具体包括使用urllib传输数据、添加特定的Headers、设置代理服务器、超时设置、常见网络异常,然后了解更方便快捷的requests库。
最好能结合一个简单的案例,学习如何使用urllib库抓取网页数据,在这个阶段重点要能熟练地掌握这两个库的使用,反复使用练习很重要。

5)主要是几种网页解析数据的学习,包括正则表达式、XPath、Beautiful
Soup和JSONPath,以及对封装了这些技术的Python模块或库的基本使用,包括re模块、lxml库、bs4库、json模块等。

可以结合大厂社招网站的案例,了解如何使用re模块、lxml库和bs4库分别解析网页数据,知道在什么样的情景下用哪个库更有优势。

6)学习并发下载;包括多线程爬虫流程分析、使用queue模块实现多线程爬虫、协程实现并发爬取。

这个阶段的实操练习推荐糗事百科,分别使用单线程、多线程、协程这三个来获取网页数据,并分析三者的性能。

7)练习如何抓取动态内容;动态网页介绍、selenium和PhantomJS概述,selenium和PhantomJS安装配置、selenium和PhantomJS的基本使用。

模拟豆瓣网站登陆是个很好的练习案例,学习在项目中如何应用selenium和PhantomJS技术。

8)图像识别与文字处理的学习;包括Tesseract引擎的下载和安装、pytesseract和PIL库、处理规范格式的文字、处理验证码等。

建议能够结合识别本地验证码图片的小程序,学习如何利用pytesseract识别图像中的验证码。

9)数据库的学习;包括数据存储简介、MongoDB数据库简介、使用PyMongo库存储到数据库等。

数据库的学习相对比较简单,了解如何一步步从该网站中抓取、解析、存储电影信息。

10)爬虫框架Scrapy

Scrapy 本身的 selector 、中间件、spider
等会比较难理解,还是建议结合具体的例子,参考别人的代码,去理解其中实现的过程,这样能够更好地理解。

① 初步学习:包括常见爬虫框架介绍、Scrapy框架的架构、运作流程、安装、基本操作等。

② 进阶深入:学习Scrapy终端与核心组件
了解Scrapy终端的启动和使用,最好能通过一个示例进行巩固,然后是Scrapy框架的一些核心组件,具体包括Spiders、Item
Pipeline和Settings,能够结合爬虫的案例,了解如何使用Scrapy框架抓取手机App的数据。

③ Scrapy-Redis分布式爬虫
包括Scrapy-Redis的完整架构、运作流程、主要组件、基本使用,以及如何搭建Scrapy-Redis开发环境等,最好能结合案例运用这些知识点。

3、知识储备不够

没有任何的计算机网络、编程基础爬虫寸步难行。

  • 网页的知识:基本的HTML语言知识(知道href等大学计算机一级内容即可)

  • 理解网站的发包和收包的概念(POST GET)

  • Js知识不可少,碰到动态网页抓取用得上

上图的内容不需要做到精通,了解就可以,爬虫这方面还是需要计算机网络基础的具备。

4 、请求和解析方式的有效掌握

爬虫的本质是网络请求和数据处理,网络请求没啥可说的,用requests框架就可以。

解析得到的内容可能是HTML,可以用正则表达式、网页解析库进行解析。可能是Json,可以直接转为Json对象解析,可能是二进制数据,可以做保存或者进一步的处理。

有以下解析方式:

  • 直接处理

  • Json解析

  • 正则表达式

  • BeautifulSoup

  • PyQuery

  • XPath

数据处理基本上就是对网页的HTML字符进行截取;

这一项操作建议新手先学会基本的用正则表达式匹配自己想要提取的内容,然后再用库,正则的规则对于新手来说会有点难度。

5、学会利用工具辅助

这里先了解,到具体的项目的时候,再熟悉运用,学会利用工具来辅助。

代码编辑器

IDE的话一般用pycharm或者VSCode比较多,可以根据自己的使用习惯和喜好来,没有规定说必须要用哪个。

F12开发者工具

  • 看源代码:快速定位元素

  • 分析xpath:1、此处建议谷歌系浏览器,可以在源码界面直接右键看

抓包工具

  • Fiddler

是一款强大Web调试工具,它能记录所有客户端和服务器的HTTP请求。以代理web服务器的形式工作,它使用代理地址:127.0.0.1,端口:8888

  • httpfox

火狐浏览器下的插件,比谷歌火狐系自带的F12工具都要好,可以方便查看网站收包发包的信息。

  • XPATH CHECKER (火狐插件)

非常不错的xpath测试工具,不过要注意:

xpath checker生成的是绝对路径,遇到一些动态生成的图标(常见的有列表翻页按钮等),飘忽不定的绝对路径很有可能造成错误。

所以这里建议在真正分析的时候,只是作为参考。

正则表达测试工具

在线正则表达式测试 ,拿来多练练手,可以辅助分析,里面有很多现成的正则表达式可以用,也可以进行参考。

6、有应付反爬的能力

一爬就挂怎么行呢!

常见的反爬虫措施

  • 字体反爬

  • 基于用户行为反爬虫

  • 基于动态页面的反爬虫

  • IP限制

  • UA限制

  • Cookie限制

应对处理手段

  • 控制IP访问次数频率,增加时间间隔

  • Cookie池保存与处理

  • 用户代理池技术

  • 字体反加密

  • 验证码OCR处理

  • 抓包

遇到反爬虫策略验证码之类的怎么办?(不想折腾的直接第四个)

  • PIL

  • opencv

  • pybrain

  • 打码平台

应对反爬这一块还是要自己多上手去试,实际爬虫过程中碰到的问题肯定不会是千篇一律,处理多了才会有上手的经验。

先找个简单的静态网站试手,先别急着去爬动态网站,功力还没到(动态网站爬取相对复杂),比如说一个简单的小说网站:笔趣看。

7、动态网页怎么办?

动态网页与静态网页的区别

静态网页:

1)静态网页不能简单地理解成静止不动的网页,它主要指的是网页中没有程序代码,只有HTML(即:超文本标记语言),一般后缀为.html,.htm,或者.xml等。

虽然静态网页的页面一旦做成,内容就不会再改变了,但是,静态网页也包括一些能动的部分,这些主要是一些GIF动画等

2)静态网页的打开,用户可以直接双击,并且不管任何人任何时间打开的页面的内容都是不变的。

动态网页:

1)动态网页是指跟静态网页相对的一种网页编程技术;

动态网页的网页文件中除了HTML标记以外,还包括一些特定功能的程序代码,这些代码可以使得浏览器和服务器可以交互,所以服务器端根据客户的不同请求动态的生成网页内容。

即动态网页相对于静态网页来说,页面代码虽然没有变,但是显示的内容却是可以随着时间、环境或者数据库操作的结果而发生改变的。

2)动态网页与网页上的各种动画、滚动字幕等视觉上的动态效果没有直接关系,动态网页也可以是纯文字内容的,也可以是包含各种动画的内容,这些只是网页具体内容的表现形式。

无论网页是否具有动态效果,只要是采用了动态网站技术(如PHP、ASP、JSP等)生成的网页都可以称为动态网页。

简单来说就是在python程序中请求网页地址下来内容和在网页上查看的html代码不一样,想要获取网页上的内容需要对其他的隐藏的数据请求进行分析。

怎样解决JavaScript渲染的问题?

答:分析Ajax请求、Selenium/WebDriver、Splash、PyV8、Ghost.py等库

遇到动态页面怎么办?

  • selenium会了这个,配合scrapy无往不利

  • phantomJS(不显示网页的selenium)

如果需要爬取异步加载的网站,可以学习浏览器抓包分析真实请求或者学习Selenium来实现自动化。

8、复制的代码不行?

很多新手说:网上的爬虫代码很多粘下来运行得不到想要的结果。

可能会是以下三方面原因:

①年代久远,爬的网站不能访问了。

②网站的结构发生了变化,原先代码的提取逻辑不适用了。

③要知道当下互联网的技术更迭发展很快的,之前很多网站都是用的HTTP协议,但是它存在着安全隐患,如今大部分都是用的HTTPS协议。

对爬虫程序来说的话就是需要在请求链接的基础上,加上headers参数:Cookie、User-Agent…依实际情况而定(User-Agent头域的内容包含发出请求的用户信息;

Cookie是在浏览器中寄存的小型数据体,它可以记载和服务器相关的用户信息)。

9、写爬虫的大致步骤

写一个爬虫的大致步骤如下

1)目的

  • 需要爬哪个网站

  • 需要爬哪些信息

  • 需要存在哪个地方

2)分析

-> 分析网页加载流程

① 直接

② 动态加载

-> Ajax

-> Js生成:直接生成、jsonp方式

③ 工具

谷歌浏览器、f12开发者工具

-> 分布待爬取页面结构 - 提取信息

  • re、正则表达式

  • Beautifulsoup

3)实现

-> 根据分析的结果,代码实现

  • requests、urllib

爬取百度示例

# 爬虫示例,爬取百度页面
import requests #导入爬虫的库,不然调用不了爬虫的函数
response = requests.get(“http://www.baidu.com”) #生成一个response对象
response.encoding = response.apparent_encoding #设置编码格式
print(“状态码:+ str( response.status_code ) ) #打印状态码
print(response.text)#输出爬取的信息

这篇看完就该轮到你大展身手啦~

关于Python学习指南

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。我收藏了很多技术干货,可以共享给喜欢我文章的朋友们,如果你肯花时间沉下心去学习,它们一定能帮到你,干货内容包括:

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

在这里插入图片描述

👉Python学习开发工具👈

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

在这里插入图片描述

👉Python入门学习视频👈

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

在这里插入图片描述

👉Python实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉全套PDF电子书👈

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

在这里插入图片描述

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

👉Python副业兼职学习路线👈

​​在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取保证100%免费

读者福利:CSDN大礼包:《Python小白从入门到精通全套学习资料》免费分享 安全链接免费领取

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值