文章目录
@[toc] 前言 爬虫自学路径 网络爬虫简介 什么时候用爬虫 网络爬虫是否合法 封装属于你的第一个爬虫模块 封装请求头 情况一: 情况二: 情况三: 随机请求头 获取网页数据 ID遍历爬虫(顺带下载限速) 网站地图 本篇小结前言
还是想先哔哔几句,虽然大家可能已经迫不及待了。目录在上边,可以直接点击跳转哦。
之前一直是零零散散的更新爬虫相关的,毕竟在学校嘛,很多时间不能自主的。要上课,要考试什么什么的。
现在好了,寒假了,系统的整理一份爬虫系列文。
哎,背后隐藏的,是一个过气博主想要死灰复燃的心呐。
大家多多支持,赞评收藏都可以,多多益善☺☺
昨天呢,做了一份系列目录,本来是要用来带一位朋友的,结果发现我俩技术差不多,但是我觉得这个路径还是很不错的
就拿来当做我们这个系列的指导吧!!!
爬虫自学路径
初步判定是这样的啦
1、认识网络爬虫与网页分析,顺便聊聊天
2、Xpath
3、爬虫缓存
4、动态网页抓取(json)
5、表单交互
6、正则表达式
7、selenium
8、并发下载
9、图片、音频、视频下载
10、验证码处理
11、Scrapy
12、来一个实战
13、再来一个实战
14、单飞去吧
如果有要增加的,会在这里再说。
网络爬虫简介
至于什么是网络爬虫,那我就不用多解释了吧。
什么时候用爬虫
用于收集不太容易手动收集的数据时。
其实这句话挺内涵的,一千个读者有一千个哈姆雷特。
在我的认知里,这句话的意思就是收集某些数据的精力耗费要比使用爬虫大,这时候就可以不要考虑直接使用爬虫了。
我这样说没问题吧。
至于使用爬虫耗费的精力,需要长时间的经验积累,建立在对自己的足够认知上。
精力耗费,从开始考虑使用爬虫开始,到拿出爬虫程序,再到它获取了正确的数据,最后清洗呈现出来为止。
这里面最耗费时间精力的就是编写代码和测试了吧。
这时候就需要有现成的框架了,后面我们会讲到scrapy框架,是一个很不错且成熟的爬虫框架。
其实我是想说,在我们学习的过程中,要有目的的吧我们写过的爬虫程序抽象出不变的部分,封装成我们自己的包。
C++学久了就这个 “臭毛病” ,就喜欢自己封装 “动态链接库” 。
网络爬虫是否合法
这个部分在之前的“偷偷学Python”系列里面有提过,那我就再稍微的讲一讲吧。
在深入讨论爬取一个网站之前,我们首先需要对目标站点的规模和结构进行一定程度的了解。网站自身的 robots.txt 和 Sitemap 文件都可以为我们提供一定的帮助(我就问一声儿真的会有人去看吗?反正我是没看过,给爬的默认能爬了,不给爬的就默认是不给爬了。。。)
封装属于你的第一个爬虫模块
要想抓取网页,我们首先需要将其下载下来。
至于解析,清洗,存储什么的,今天咱先不谈。
咱先确定这个网页能够下载下来是吧。
就不弯弯绕了,我直接呈现最终步骤。我把这个过程模拟为两个人建交、授受的一个过程吧。
封装请求头
什么是封装请求头呢?今天我过来和你交朋友了,
情况一:
我说:“嘿,兄弟,交个朋友?”
你说:“你是谁呢?”
我说:“你猜呀?”
这时候,你什么反应?
之后,我跟你说:“嘿,大兄弟,咱俩既然是朋友了,你可以帮我个小忙吗?五分钟,我要你的全部信息。”
但凡你戒备心有的话,就不会给我了。
这是比较好的啦。
情况二:
经过几句话的寒暄,你发现我是个推销的,拿着你的信息准备给你推销点你根本用不上的东西,比方说给头发本就浓密的你推销快速生发剂,这不是开玩笑嘛!!!
你会理我吗?都这么赤裸裸的推销了。
那应该怎么办才能把这个生发剂塞到你手里呢?
情况三:
我路过在大厅里等面试通知的你,走过去,调个头看你一眼,再看你一眼,递给你一张名片:“小伙子,我是隔壁项目组的组长,你是来面试的?”
你说是啊
我说:“哦,他们这个组工作压力都挺大的,看你这一头浓密的头发,怕是还没经历过洗礼。可惜了。”
接着,我又说:“这样吧,你要是面试过了,到时候扛不住压力可以来找我,这是我的名片”
唰
然后再把那啥给你。你愉快的收了。
那什么是请求头呢?就是那张名片了。
一张告诉即将被爬的网站:“我是普通浏览器”的名片。
随机请求头
咱也不用自己去准备啥请求头了,大量请求的时候一直用同一个头也不好,到时候给你封了。
# 导入UserAgent类
from fake_useragent import UserAgent
ua = UserAgent()
#第一次使用UserAgent时,会从互联网上下载浏览器标志数据库
#如果网速较慢的话,会出现报错,多试几次就好了。
#print(ua.ie) # 获取IE浏览器标志
print(ua.random) # 获取一个随机的浏览器标志
# 如果要写在一行:UserAgent().random
获取网页数据
目前 Python 编写的主流爬虫一般都会使用 requests 库来管理复杂的 HTTP 请求。
import requests
from fake_useragent import UserAgent
def get_html(url,times):
'''
这是一个用户获取网页源数据的函数
:param url: 目标网址
:param times: 递归执行次数
:return: 如果有,就返回网页数据,如果没有,返回None
'''
try:
res = requests.get(url = url,headers = {"User-Agent":UserAgent().random) #带上请求头,获取数据
if res.status>=200 and res.status<=300: #两百打头的标识符标识网页可以被获取
return res
else:
return None
except Exception as e:
print(e) # 显示报错原因(可以考虑这里写入日志)
if times>0:
get_html(url,times-1) # 递归执行
ID遍历爬虫部分我就不说了,简单的数学逻辑罢了啊。
ID遍历爬虫(顺带下载限速)
如果我们爬取网站的速度过快,就会面临被封禁或是造成服务器过载的风险。为了降低这些风险,我们可以在两次下载之间添加一组延时,从而对爬虫限速。
算了,ID遍历爬虫我还是得写。
import time
def get_ID_html(url_pool,res_pool):
'''
这是一个用ID循环去下载网页的函数
:param url_pool: url池
:param res_pool:返回值池
:return: 无
'''
while url_pool:
for url in url_pool:
try:
res = requests.get(url=url, headers = {"User-Agent":UserAgent().random) # 带上请求头,获取数据
url_pool.remove(url)
res_pool.append(res)
except:
pass
finally:
time.sleep(2)
网站地图
说到这个网站地图啊,还是先看看是什么吧。
站点地图是一个网站所有链接的容器。很多网站的连接层次比较深,爬虫很难抓取到,站点地图可以方便爬虫抓取网站页面,通过抓取网站页面,清晰了解网站的架构,网站地图一般存放在根目录下并命名sitemap,为爬虫指路,增加网站重要内容页面的收录。站点地图就是根据网站的结构、框架、内容,生成的导航网页文件。站点地图对于提高用户体验有好处,它们为网站访问者指明方向,并帮助迷失的访问者找到他们想看的页面。
怎么看网站地图呢?
在网站的根目录下,打开那个robots.txt文件,就能找到网站地图的网址了。
看一下CSDN的爬虫协议啊:https://www.csdn.net/robots.txt
最下面有这么一行:Sitemap: http://www.csdn.net/article/sitemap.txt
自己进去看哈。
之后要怎么爬呢,如果你全都要的话。参考上面那块儿。
如果要对所有的网址做一个筛选嘛,不会真有人要全爬吧?
那建议使用正则表达式。
本篇小结
第一篇,讲太多了一不好,就先到这里吧。
本篇介绍了网络爬虫,然后给出了一个能够在后续章节中复用的成熟爬虫。
此外,我们还介绍了一些外部工具和模块的使用方法,用于了解网站、用户代理、网站地图、爬取延时以及各种高级爬取技术。
下一章中,我们将讨论如何从已爬取到的网页中获取数据。
赞评收藏一键三连啊老铁们!!!