Python爬虫自学系列(一)[亲测有效]

Python爬虫自学系列(一)[亲测有效]还是想先哔哔几句,虽然大家可能已经迫不及待了。目录在上边,可以直接点击跳转哦。之前一直是零零散散的更新爬虫相关的,毕竟在学校嘛,很多时间不能自主的。要上课,要考试什么什么的。现在好了,寒假了,系统的整理一份爬虫系列文。哎,背后隐藏的,是一个过气博主想要死灰复燃的心呐。大家多多支持,赞评收藏都可以,多多益善☺☺昨天呢,做了一份系列目录,本来是要用来带一位朋友的,结果发现我俩技术差不多,但是我觉得这个路径还是很不错的就拿来当做我们这个系列的指导吧!!

大家好,欢迎来到IT知识分享网。

在这里插入图片描述

前言

还是想先哔哔几句,虽然大家可能已经迫不及待了。目录在上边,可以直接点击跳转哦。
之前一直是零零散散的更新爬虫相关的,毕竟在学校嘛,很多时间不能自主的。要上课,要考试什么什么的。

现在好了,寒假了,系统的整理一份爬虫系列文。
哎,背后隐藏的,是一个过气博主想要死灰复燃的心呐。
大家多多支持,赞评收藏都可以,多多益善☺☺

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


爬虫自学路径

初步判定是这样的啦

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


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


本篇小结

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

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


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

在这里插入图片描述

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/24973.html

(0)
上一篇 2023-08-06 10:00
下一篇 2023-08-07 11:33

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信