当前位置:AIGC资讯 > 数据采集 > 正文

Python爬虫自学系列(一)

文章目录

@[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
自己进去看哈。

之后要怎么爬呢,如果你全都要的话。参考上面那块儿。
如果要对所有的网址做一个筛选嘛,不会真有人要全爬吧?
那建议使用正则表达式。

本篇小结

第一篇,讲太多了一不好,就先到这里吧。

本篇介绍了网络爬虫,然后给出了一个能够在后续章节中复用的成熟爬虫。
此外,我们还介绍了一些外部工具和模块的使用方法,用于了解网站、用户代理、网站地图、爬取延时以及各种高级爬取技术。
下一章中,我们将讨论如何从已爬取到的网页中获取数据。

赞评收藏一键三连啊老铁们!!!

更新时间 2023-11-08