Python爬虫自学系列(一)_Python教程

文章目录

        前言

        还是想先哔哔几句,虽然大家可能已经迫不及待了。目录在上边,可以直接点击跳转哦。

        之前一直是零零散散的更新爬虫相关的,毕竟在学校嘛,很多时间不能自主的。要上课,要考试什么什么的。

        现在好了,寒假了,系统的整理一份爬虫系列文。

        哎,背后隐藏的,是一个过气博主想要死灰复燃的心呐。

        大家多多支持,赞评收藏都可以,多多益善☺☺

        昨天呢,做了一份系列目录,本来是要用来带一位朋友的,结果发现我俩技术差不多,但是我觉得这个路径还是很不错的

        就拿来当做我们这个系列的指导吧!!!


        爬虫自学路径

        初步判定是这样的啦

        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文件,就能找到网站地图的网址了。

        最下面有这么一行:Sitemap: http://www.csdn.net/article/sitemap.txt

        自己进去看哈。


        之后要怎么爬呢,如果你全都要的话。参考上面那块儿。

        如果要对所有的网址做一个筛选嘛,不会真有人要全爬吧?

        那建议使用正则表达式。


        本篇小结

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

        本篇介绍了网络爬虫,然后给出了一个能够在后续章节中复用的成熟爬虫。

        此外,我们还介绍了一些外部工具和模块的使用方法,用于了解网站、用户代理、网站地图、爬取延时以及各种高级爬取技术。

        下一章中,我们将讨论如何从已爬取到的网页中获取数据。


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

        Python爬虫自学系列(一)_python开发_02