转行学Python:为什么我入不了爬虫的门
Posted 程序员朱鹏
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了转行学Python:为什么我入不了爬虫的门相关的知识,希望对你有一定的参考价值。
1、首先!你要对爬虫有个明确的认识:
爬虫的重要思想
1)理论上来讲只要是网页上面能够看到的数据都是可以爬取的,况且互联网的内容都是人写出来的,不会第一页是a,下一页是5,肯定有规律可寻,这就给人有了爬取的可能。
(因为所有看到的网页上的数据都是由服务器发送到我们电脑上面的,只是有的数据加密过,很难解密)
2)“框架不变”:网站不同,但是原理都类似,大部分爬虫都是从 发送请求——获得页面——解析页面——下载内容——储存内容 这样的流程来进行,只是用的工具不同。
3)在网页上无法看到或者无法获取的数据,爬虫同样不可能拿到,比如一些付费资料。
4)分析页面数据的原则是从简到繁,从易到难。
-
① 直接通过网页源代码获取
-
② 分析是否为ajax异步加载
-
③ 数据是否被加密 js
现实中,爬虫面临的问题不少,比如:
- 页面规则不统一
- 爬下来的数据处理
- 反爬虫机制
还有很多类似的各种问题,爬虫虽说简单,但往深了学也是没有止境的(比如搜索引擎等),还是需要一步一步来,一步跨到位是不可能的。
2、缺少合理的学习路径,上来 Python、html 各种学,极其容易放弃
零基础学习Python爬虫路线
1)主要是学习Python的基础知识,做到基本能够掌握Python的程度。
- 扪心自问一下,自己的python基本功修炼的如何呢?
Python易学难精,对于技术方面,首先基础知识一定要扎实,包括自己方向的语言基础、计算机基础、算法以及编程等等。
2)了解爬虫的实现原理和技术,包括爬虫实现原理、爬虫抓取网页的详细流程、通用爬虫中网页的分类、通用爬虫相关网站文件、反爬虫应对策略、Python做爬虫的优势等。
这一阶段需要学习爬虫具体是怎样抓取网页的,并对抓取过程中产生的一些问题有所了解。
3)学习网页请求原理,包括浏览网页过程、HTTP网络请求原理、HTTP抓包工具Fiddler。
浏览网页的过程:
在浏览网页的过程中,我们会看到几张的图片以及百度搜索框,这个过程其实就是用户输入网址之后,经过DNS服务器,找到服务器主机,向服务器发出一个请求,服务器经过解析之后,发送给用户的浏览器 HTML、JS、CSS 等文件,浏览器解析出来,便可以看到形形色色的图片了。
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框架的架构、运作流程、安装、基本操作等。
3、知识储备不够
没有任何的计算机网络、编程基础爬虫寸步难行。
- 网页的知识:基本的HTML语言知识(知道href等大学计算机一级内容即可)
- 理解网站的发包和收包的概念(POST GET)
- Js知识不可少,碰到动态网页抓取用得上
4、请求和解析方式的有效掌握
爬虫的本质是网络请求和数据处理,网络请求没啥可说的,用requests框架就可以。
Request和Response
Request:浏览器就发送消息给该网址所在的服务器,这个过程叫做HTTP Request。
Response:服务器收到浏览器发送的消息后,能够根据浏览器发送消息的内容,做相应处理,然后把消息回传给浏览器。这个过程叫做HTTP Response。
浏览器收到服务器的Response信息后,会对信息进行相应处理,然后展示。
Request
请求方式:主要有GET、POST两种类型,另外还有HEAD、PUT、DELETE、OPTIONS等。
请求URL:URL全称统一资源定位符,如一个网页文档、一张图片、一个视频等都可以用URL唯一来确定。
请求头:包含请求时的头部信息,如User-Agent、Host、Cookies等信息。
请求体:请求时额外携带的数据如表单提交时的表单数据。
Response
响应状态:有多种响应状态,如200代表成功、301跳转、404找不到页面、502服务器错误。
响应头:如内容类型、内容长度、服务器信息、设置Cookie等等
响应体:最主要的部分,包含了请求资源的内容,如网页HTML、图片二进制数据等。
解析得到的内容可能是HTML,可以用正则表达式、网页解析库进行解析。可能是Json,可以直接转为Json对象解析,可能是二进制数据,可以做保存或者进一步的处理。
有以下解析方式:
- 直接处理
- Json解析
- 正则表达式
- BeautifulSoup
- PyQuery
- XPath
数据处理基本上就是对网页的HTML字符进行截取,这一项操作建议新手先学会基本的用正则表达式匹配自己想要提取的内容,然后再用库,正则的规则对于新手来说会有点难度。
5、学会利用工具来辅助
这里先了解,到具体的项目的时候,再熟悉运用。
1)代码编辑器
IDE的话一般用pycharm或者VSCode比较多,可以根据自己的使用习惯和喜好来,没有规定说必须要用哪个。
2)F12 开发者工具
- 看源代码:快速定位元素
- 分析xpath:1、此处建议谷歌系浏览器,可以在源码界面直接右键看
3)抓包工具
- Fiddler
是一款强大Web调试工具,它能记录所有客户端和服务器的HTTP请求。以代理web服务器的形式工作,它使用代理地址:127.0.0.1,端口:8888
- httpfox
火狐浏览器下的插件,比谷歌火狐系自带的F12工具都要好,可以方便查看网站收包发包的信息。
- XPATH CHECKER (火狐插件)
非常不错的xpath测试工具,但是有几个坑:
xpath checker生成的是绝对路径,遇到一些动态生成的图标(常见的有列表翻页按钮等),飘忽不定的绝对路径很有可能造成错误,所以这里建议在真正分析的时候,只是作为参考。
记得把如下图xpath框里的“x:”去掉,貌似这个是早期版本xpath的语法,目前已经和一些模块不兼容(比如scrapy),还是删去避免报错。
- 正则表达测试工具
在线正则表达式测试 ,拿来多练练手,可以辅助分析,里面有很多现成的正则表达式可以用,也可以进行参考。
6、有应付反爬的能力
一爬就废怎么能行呢!
常见的反爬虫措施:
- 字体反爬
- 基于用户行为反爬虫
- 基于动态页面的反爬虫
- IP限制
- UA限制
- Cookie限制
应对反爬的处理手段有:
- 控制IP访问次数频率,增加时间间隔
- Cookie池保存与处理
- 用户代理池技术
- 字体反加密
- 验证码OCR处理
- 抓包
遇到反爬虫策略验证码之类的怎么办?(不想折腾的直接第四个)
- PIL
- opencv
- pybrain
- 打码平台
应对反爬这一块还是要自己多上手去试,实际爬虫过程中碰到的问题肯定不会是千篇一律,处理多了才会有上手的经验。
先找个简单的静态网站试手,先别急着去爬动态网站,功力还没到(动态网站爬取相对复杂),比如说一个简单的小说网站:笔趣看。
7、很多新手说:网上的爬虫代码很多粘下来运行得不到想要的结果
可能会是以下三方面原因:
①年代久远,爬的网站不能访问了。
②网站的结构发生了变化,原先代码的提取逻辑不适用了。
③要知道当下互联网的技术更迭发展很快的,之前很多网站都是用的HTTP协议,但是它存在着安全隐患,如今大部分都是用的HTTPS协议。
对爬虫程序来说的话就是需要在请求链接的基础上,加上headers参数:Cookie、User-Agent…依实际情况而定(User-Agent头域的内容包含发出请求的用户信息;Cookie是在浏览器中寄存的小型数据体,它可以记载和服务器相关的用户信息)。
8、写一个爬虫的大致步骤
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学习路线
爬虫
Linux基础
面向对象
项目实战
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。给大家免费分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
这份完整版的Python全套学习资料已经上传CSDN 朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。
以上是关于转行学Python:为什么我入不了爬虫的门的主要内容,如果未能解决你的问题,请参考以下文章