Python爬虫基础笔记

举报
Jack20 发表于 2022/10/28 09:49:36 2022/10/28
【摘要】 什么是网络爬虫?网络爬虫是一种从互联网抓取数据信息的自动化程序;如果我们把互联网比作一张大的蜘蛛网,数据便是存放于蜘蛛网的各个节点,而爬虫就是一只小蜘蛛(程序),沿着网络抓取自己的猎物(数据)。网络爬虫如何工作?构建网页·构造一个请求并发送给服务器;·接收到响应(页面源代码)并将其解析出来;提取信息·网页的结构有一定的规则,采用正则表达式提取;·使用Requests库,我们可以高效快速地从中...

什么是网络爬虫?

网络爬虫是一种从互联网抓取数据信息的自动化程序;

如果我们把互联网比作一张大的蜘蛛网,数据便是存放于蜘蛛网的各个节点,而爬虫就是一只小蜘蛛(程序),沿着网络抓取自己的猎物(数据)。


网络爬虫如何工作?

构建网页

·构造一个请求并发送给服务器;

·接收到响应(页面源代码)并将其解析出来;


提取信息

·网页的结构有一定的规则,采用正则表达式提取;

·使用Requests库,我们可以高效快速地从中提取网页信息;


保存数据

·将提取到的数据保存到某处以便后续使用;

·保存形式有多种多样,可以保存到文本或者数据库。


网络爬虫能做什么?

爬虫根据不同的用途,可以分为通用爬虫和专用爬虫,本次课程中使用的抓取图片的爬虫即为专用爬虫。爬虫的主要用途有如下几种:

·搜索引擎:Google、Baidu等;

·图片抓取:抓取特定类型的图片,可用于个人收藏、Al图像分析等;

·信息收集:新闻资讯聚合、学术信息等;

·数据分析:商品价格比较、股票量化交易等;


为什么使用Python编写爬虫?

. Python编程语言语法简洁,易于学习,快速上手;

. Python有成熟的爬虫生态,在抓取网页本身和网页抓取后的处理都有丰富的框架和库可用

(如Beautiful Soup框架、Urlib2和Requests库等),编写爬虫不必从零开始;

. Python在处理数据方面有天然的优势,可以把Python爬虫与后续的机器学习、数据可视化无缝对接。


什么是Python?

Python是一种面向对象的解释型计算机程序设计语言,主要特性有:

·免费,开源;

·语法简洁清晰,容易上手;

·多种平台,可扩展,不区分操作系统;

支持模块和包,有极为丰富、功能强大的库;

·语法表达优美易读,利用缩进表示语句块的开始和退出;

·在人工智能、科学计算、图形技术、动画、游戏等行业被广泛使用。


Python基础:数据类型

Python支持的标准数据类型主要有如下几种:

·数字:如整型(123)、布尔型(True/False) 、浮点型(1.23)

·字符串(String) :如'l love Python', "l do not love Python”

·列表(List):如[ 'a', 'b', 'c', 'd'],[ 1,2,3,4]

·元组(Tuples):如('a', 'b', 'c')元组是不可变列表,一旦创建就无法改变

·字典(Dictionaries):如{'name':'Tom' , 'age': 24},键值对一—对应


Python基础:变量

·变量名必须是字母或_开头,以双下划线开头和结尾的变量是python特殊方法的专用标识,如_init_()代表类的构造函数,供解释器使用;

·变量可以引用任何类型的对象;变量没有类型,只有对象有类型。变量在使用前必须被赋值。例如: x = 1在Python中的赋值过程如下:

1、在内存中创建对象1;

2、创建变量名x;

3、把变量和对象建立映射关系;

4、赋值是把对象的引用赋值给变量而不是值。


Python基础:文件

·文件是我们储存信息的地方,我们经常要对文件进行读、写等操作·在Python中,我们可用Python提供的函数和方法方便地操作文件。


f.open() 打开文件

f.close() 关闭文件,用open()打开文件后不关闭会占用系统文件句柄数。

f.readline() 读出一行信息。(文件EOF读出的是空串)

f.readlines() 读出所有行,也就是读出整个文件的信息。

f.write(string) 把string字符串写入文件。

f.writelines(list) 把list中的字符串一行一行地写入文件。


Python基础:语句

lf语句用来做条件判断,基本原理及形式如下:

. for循环语句: for iter_var in iterable: suite_to_repeat

·每次循环,iter_var迭代变量为可迭代对的当前元素,提供给suite_to_repeat语句块使用。


Python基础:函数

函数是一个能完成特定功能的代码块,可在程序中重复使用,减少程序的代码量和提高程序的执行效率。在python中函数定义语法如下:

def function_name (arg1 ,arg2 [ ,...]):

statement

[return value]

返回值不是必须的,如果没有return语句,则Python默认返回值None;

·函数的参数是函数与外部沟通的桥梁,它可接收外部传递过来的值;在函数内部中给参数赋值不会影响调用者;在函数内部修改可变类型的参数会影响到调用者。


Python基础:模块

·函数是一个能完成特定功能的代码块,可在程序中重复使用,减少程序的代码量和提高程序函模块提供了一种逻辑的方式来组织我们的代码;

·模块的物理形式就是文件。一个文件对应一个模块,文件名就是模块名+.py

·通过import关键字我们可以导入模块: import module1,[module2,[...moduleN]]

·推荐的import导入模块顺序: python标准库—> python第三方库一>自定义模块。


·模块(module)其实就是.py文件,里面定义了一些函数、类、变量等;

·包(package)是多个模块的聚合休形成的文件夹,里面可以是多个py文件

·库(参考其他语言的说法)在python中就是模块和包,是指完成一定功能的代码集合。


Python基础:异常处理

. Python无法正常处理程序时就会发生一个异常,异常发生时我们需要捕获处理它,否则程序会终止执行;

·捕捉异常使用try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。

try :

try_suite            #监控这里的异常

except Exception [ , reason] :

except_suite            #异常处理代码



什么是HTML ?

.HTML (HyperText Markup Language)是一种用于创建网页的超文本标记语言;

. HTML可以构建WEB站点,HTML运行在浏览器上,由浏览器来解析。


HTML标签

HTML标签通常被称为HTML标签(HTML tag),标签是由尖括号包围,通常是成对出现的,比如<header>和</header>,<body>和</body>。

HTML常用标签如下:

<div>texto1</div>, <span>text02</ span>        #文本标签

<input type="password"/>(text、password、checkbox)        #输入框

<a href="ur1"></a>        #超文本链接

<img src= "ur1"/>            #图片


HTML网页结构

以下是一个可视化的HTML网页示意图:


HTTP协议

HTTP(超文本传输协议)是一个基于请求与响应模式的应用层的协议,常基于TCP的连接方式。HTTP协议是万维网的数据通信基础,主要特点可概括如下:

·简单快速:客户请求时只需传送请求方法和路径,程序规模小,因而通信速度很快;

·灵活:HTTP允许传输任意类型的数据对象;

·无连接:服务端每次只处理一个请求,完成即断开,节省传输时间;


HTTP请求

. HTTP请求由三部分组成,分别是:请求行、消息报头、请求正文;

·HTTP请求格式如下:Method Request-URI HTTP-Version CRLF,其中Method表示请求方法;Request-URI是一个统一资源标识符;HTTP-Version表示请求的HTTP协议版本;CRLF表示回车和换行。

GET            请求获取Request-URI所标识的资源

POST        在Request-URI所标识的资源后附加新的数据

HEAD        请求获取由Request-URI所标识的资源的响应消息报头

PUT            请求服务器存储一个资源,并用Request-URI作为其标识

DELETE        请求服务器删除Request-URI所标识的资源


HTTP响应

·在接收和解释请求消息后,服务器返回一个HTTP响应消息;

·HTTP响应格式如下:HTTP-Version Status-Code Reason-Phrase CRLF,其中,HTTP-

Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。

1xx        指示信息--表示请求已接收,继续处理            N/A

2xx        成功--表示请求已被成功接收、理解、接受        200 OK

3xx        重定向--要完成请求必须进行更进—步的操作    N/A

4xx        客户端错误--请求有语法错误或请求无法实现    404 Not Found/403 Forbidden

5xx        服务器端错误--服务器未能实现合法的请求        503 Server Unavailable


Requests库

Requests是一常用的http请求库,它使用python语言编写,可以方便地发送http请求,以及方便地处理响应结果。



爬虫抓取图片方案对比

对比项                本地方案                    华为云方案

运行环境        本地环境搭建复杂            云上ECS自带Python环境,无需配置

反爬虫应对        个人PC为代理共享公网地址        独享公网EIP地址,可随时更改


计算资源

本地方案:受限于个人PC性能,耽误其他工作处理,无法随时在线

华为云方案:容易获取、即开即用、弹性伸缩、随时在线、按需使用


数据库

本地方案:资源性能受限,不便于数据分享或二次利用

华为云方案:即开即用,完全托管;高性能易扩展;数据安全可备份恢复;便于分享和二次利用



整体解决方案架构


爬虫的生命周期管理

生命周期                涉及到的华为云服务                    详细信息

Python运行环境                ECS弹性云主机            使用Python3环境、VIM编辑器

爬虫编写与调试                ECS弹性云主机        使用Python3环境、CentOS系统

爬虫程序管理        ECS弹性云主机、EIP公网地址            运行、停止Python爬虫

存储抓取信息        ECS弹性云主机、OBS对象存储            CentOS系统、OBSUtil工具


使用ECS运行爬虫的优势

. ECS有弹性公网IP地址,有效方式网站反爬;

. ECS购买方便,即开即用,运行高效(相较于个人电脑);

·ECS规格丰富,可根据爬取任务负载灵活选择或者变更;

.ECS按需使用,运行完成爬虫程序后即可释放资源,节省费用;

. ECS可与其他华为云服务配合使用,是更适合网络爬虫的运行环境。


使用OBS存储爬取内容的优势

可靠

OBS通过AZ内设备/数据多冗余和AZ间数据容灾等多级可靠性架构,保障数据持久性高达99.999999999%(11个9),业务连续性高达99.99%.


高效

OBS通过智能调度,并结合传输加速大数据垂直优化,为用户提供高并发、大带宽、稳定低时延的数据访问体验。

安全

OBS通过可信云认证,支持服务端加密、防盗链、VPC网络隔离、日志审计、细粒度权限控制,保障数据安全可信。


易用

OBS支持REST API,提供多种语言的SDK,兼容主流的客户端工具,您可以随时随地通过网络上传、下载、管理您的数据。


什么是ECS ?

弹性云服务器(Elastic Cloud Server)是一种可随时自助获取、可弹性伸缩的云服务器,帮助用户打造可靠、安全、灵活、高效的应用环境。


ECS的主要特性如下:

·数据可靠:可弹性扩展的虚拟块存储服务,高数据可靠性,高V/O吞吐能力;

·弹性易用:提供控制台、远程终端和API等多种管理方式,给您完全管理权限;

·规格丰富:多类型、多规格、多镜像;

·多维监控:提供开放性的云监控服务平台,提供资源的实时监控、告警、通知等服务。


ECS购买流程

什么是OBS ?

OBS对象存储服务(Object Storage Service)是一个基于对象的海量存储服务,为客户提供海量、安全、高可靠、低成本的数据存储能力,包括创建、修改、上传、下载、删除对象等。

OBS相关概念:

·对象(object)

·桶(bucket)

.AK: Access Key ID安全证书.

SK: Secret Access Key接入证书

·区域


OBS权限控制

通过IAM设置用户OBS的资源操作权限

Tenant Administrator        拥有该权限的用户可以对OBS对象存储资源执行任意操作。

Tenant Guest                拥有该权限的用户可以查询OBS对象存储资源的利用情况。

OBS Buckets Viewer    具备该权限的用户,可以执行获取桶列表、查询桶元数据和位置信息的操作。


OBS服务监控

.OBS管理控制支持基于桶的存储空间、对象数量、流量统计和请求次数统计;·管理员可以在桶概览页面查看到桶的监控信息。

OBS使用方式

. OBS对象存储服务提供了多种数据存取使用方式,覆盖各类使用场景;·本次实践采用Linux系统上的obsutils客户端来管理对象存储。

洞察目的网页

先洞察确认需要获得数据信息(本实验中的数据指的是明星图片),然后使用Python编程语言编写简单的爬虫,并将此爬虫程序封装为可交互的应用程序。

在编写Python爬虫程序之前,需要准备以下准备爬虫抓取的目的网页关键信息:

·目的网站:百度图片images.baidu.com

·目的关键字:刘德华(娱乐明星)、Yao Ming(体育明星)

编写Python爬虫代码

在洞察目的网页后,编写Python爬虫代码的主要步骤如下

·步骤1使用Windows自带记事本创建一个空的文本文件,用于编写Python爬虫代码;

·步骤2导入需要使用到的正则表达式regex和requests两个Python库;

·步骤3从浏览器地址栏复制百度图片当前页面的URL地址;

·步骤4分析复制的地址,传入requests,编写正则表达式;

·步骤5 循环抓取并处理图片异常情况,增加10秒超时控制;

·步骤6 保存抓取到的图片到本地images目录,并以数字命名图片;

·步骤7完成全部的Python爬虫代码。


实践

步骤1新建项目文件夹,创建爬虫项目

步骤⒉使用pycharm打开爬虫项目

步骤3编写vamll.py文件

步骤4编写itmes.py文件

步骤5 在pipelines.py中添加RDS信息

步骤6 创建start.py文件

步骤7编写settings.py文件


使用OBS存储图片

在华为公有云端创建OBS对象存储,并将Python爬虫抓取的明星图片从CentOS操作系统的ECS云主机上传到OBS存储桶中,方便访问和共享。

1. (是非题)使用Python编写网络爬虫需要从零开始,没有可用的框架。

true

false 正确

2. (单选题)网络爬虫的本质是什么?

搜索引擎

抓取信息的程序 正确

网络上的蜘蛛

网页URL

3. (单选题)OBS对象存储服务通过下列哪种方式来进行用户认证?

用户名/密码

私钥签名

公钥签名

AK/SK 正确

4. (多选题)HTTP协议具有哪些特点?

简单快速

灵活

无连接

有状态

正确

5. (多选题)创建OBS对象存储服务的存储桶时,有哪些可选的桶策略?

私有

公共读

公共读写


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。