爬虫概念、基本使用及一个类型和六个方法(一)

news/2024/7/19 9:59:36 标签: 爬虫, python

目录

一、爬虫简介

1.什么是爬虫

2.爬虫的核心

3.爬虫的用途

4.爬虫的分类

5.反爬手段

二、Urllib基本使用

1.导入我们需要的包

2.定义一个url

 3.模拟浏览器向服务器发送请求

4.获取响应中的页面的源码

5.打印数据

三、一个类型和六个方法

1.定义url,并向服务器发送请求

2.一个类型

3.六个方法

参考


一、爬虫简介

1.什么是爬虫

如果我们把互联网比作一个巨大的网,那一台计算机上的数据就是蜘蛛网上的一个猎物,而爬虫程序就是一只小蜘蛛,沿着蜘蛛网抓取自己想要的数据。

解释1:通过一个程序进行爬取网页,获取有用信息

解释2:使用程序模拟浏览器,去向服务器发送请求,获取响应信息。

2.爬虫的核心

爬取网页:爬取整个网页,包含了网页中所有的内容

解析数据:将网页中你得到的数据进行解析

难点:爬虫与反爬虫之间的博弈

3.爬虫的用途

数据分析/人工数据集

社交软件冷启动

舆情监控

竞争对手监控

4.爬虫的分类

通用爬虫

       实例:百度、360、Google等搜索引擎

       功能:访问网页,抓取数据,数据存储,数据处理,提供检索服务

       Robots协议:一个约定俗称的协议,添加robots.txt文件,来说明本网站哪些内容不可以被抓取,起不到限制作用,自己写的爬虫无需遵守。

       网站排名:

              以前:根据pagerank算法值进行排名(参考网站流量,点击率等指标)

              现在:百度竞价排名

       缺点:抓取的数据大多是无用的;不能根据用户的需求精准的获取数据。

聚焦爬虫:

       功能:根据需求,实现爬虫程序,抓取需要的数据

       设计思路:确定要爬取的url;模拟浏览器通过http协议访问url,获取服务器返回的html代码;解析html字符串(根据一定的规则提取数据)

5.反爬手段

1.user_agent:中文名Wie用户代理,简称UA,他是一个特殊字符串头,是的服务器能够市北客户使用的操作系统及版本,CPU类型,浏览器及版本,浏览器渲染引擎,浏览器语言,浏览器插件等。

2.代理IP:(超出人类访问限制就会封IP)

  • 西次代理
  • 快代理
  • 什么是高匿名,匿名和透明代理?他们有什么区别?

        (1)使用透明代理,对方服务器可以知道你使用了代理,并且也知道你的真实IP。

        (2)使用匿名代理,对方服务器可以知道你使用了代理,但不知道你的真实IP。

        (3)使用高匿名代理,对方服务器不知道你使用了代理,也不知道你的真实IP。

3.验证码访问

        打码平台:云打码平台

4.动态加载网页:网站返回的是js数据,并不是网页真实数据;selenium驱动真实的浏览器发送请求。

5.数据加密

        分析js代码

二、Urllib基本使用

 目标:使用urllib获取百度网站首页的源码

urllib不需要安装,python自带,可直接使用

1.导入我们需要的包

python"># 使用urllib获取百度首页的源码
import urllib.request

2.定义一个url

python"># 1.定义一个url(你要访问的网页地址)
url = "http://www.baidu.com"

 3.模拟浏览器向服务器发送请求

注意发送请求时要确保你的电脑是联网,不然就会报错

使用 urllib.request.urlopen() 方法发送请求

python"># 2.模拟浏览器向服务器发送请求(联网)
response = urllib.request.urlopen(url)

4.获取响应中的页面的源码

使用 read() 方法读取数据

这里注意要将获取的数据进行解码 decode(),否则无法解析网页中的中文。

python"># 3.获取响应中的页面的源码
# read()方法 返回的是字节形式的二进制数据
# 将二进数数据转换为字符串
# 二进制-->字符串  这个动作叫做解码 decode("编码的格式")
# 网页的编码格式可以看网页源码中 head --> meta --> content 里的charset中有写明
content = response.read().decode('utf-8')

5.打印数据

python"># 4.打印数据
# 打印结果:b'<!DOCTYPE html><!--STATUS OK--><html><head><meta。。。
print(content)

完整代码:

python"># 使用urllib获取百度首页的源码
import urllib.request

# 1.定义一个url(你要访问的网页地址)
url = "http://www.baidu.com"

# 2.模拟浏览器向服务器发送请求(联网)
response = urllib.request.urlopen(url)

# 3.获取响应中的页面的源码
# read()方法 返回的是字节形式的二进制数据
# 将二进数数据转换为字符串
# 二进制-->字符串  这个动作叫做解码 decode("编码的格式")
# 网页的编码格式可以看网页源码中 head --> meta --> content 里的charset中有写明
content = response.read().decode('utf-8')


# 4.打印数据
# 打印结果:b'<!DOCTYPE html><!--STATUS OK--><html><head><meta。。。
print(content)

三、一个类型和六个方法

1.定义url,并向服务器发送请求

python"># 1.定义一个url(你要访问的网页地址)
url = "http://www.baidu.com"

# 2.模拟浏览器向服务器发送请求(联网)
response = urllib.request.urlopen(url)

2.一个类型

服务器返回的响应是HTML格式

python"># 3.获取响应中的页面的源码
print(type(response))   # <class 'http.client.HTTPResponse'>

3.六个方法

注意:以下读取的content都需要加 decode()进行解码,否则无法解析网页中的中文。

(1)read() 方法 

python"># 按照一个字节一个字节的去读整个网页的字节
content = response.read()
python"># 读五个字节
content = response.read(5)

(2)读取一行

python"># 读取一行
content = response.readline()

(3)一行一行的读,读所有字节

python"># 一行一行的读,读取所有字节
content = response.readlines()
print(content)

(4)返回状态码

python"># 返回状态码 如果是200,则表示请求成功
print(response.getcode())

(5)返回url地址

python"># 返回 URL 地址
print(response.geturl())

 (6)返回状态信息

python"># 获取的是一些状态信息
print(response.getheaders())

完整代码:

python">import urllib.request


# 1.定义一个url(你要访问的网页地址)
url = "http://www.baidu.com"


# 2.模拟浏览器向服务器发送请求(联网)
response = urllib.request.urlopen(url)


# 3.获取响应中的页面的源码(获取到的都是二进制的,后面需要再decode())
# 一个类型和六个方法:HTTPResponse  read, readline, readlines, getcode, geturl, getheaders
# print(type(response))   # <class 'http.client.HTTPResponse'>

# 按照一个字节一个字节的去读整个网页的字节
# content = response.read()

# 读五个字节
# content = response.read(5)

# 读取一行
# content = response.readline()

# 一行一行的读,读取所有字节
# content = response.readlines()
# print(content)

# 返回状态码 如果是200,则表示请求成功
print(response.getcode())

# 返回 URL 地址
print(response.geturl())

# 获取的是一些状态信息
print(response.getheaders())

参考

尚硅谷Python爬虫教程小白零基础速通(含python基础+爬虫案例)


http://www.niftyadmin.cn/n/5239073.html

相关文章

C# 序列化+Base64加密、解密

一、保存到文件//将对象序列化成Json字符串(明文)string json System.Text.Json.JsonSerializer.Serialize(configModel);//将Json明文字符进行Base64加密byte[] jsonBytes Encoding.UTF8.GetBytes(json);string b64Str Convert.ToBase64String(jsonBytes);//写入文件File.W…

pip命令详解

pip命令介绍 pip是由Ian Bicking在2008年提出的&#xff0c;他将pyinstall重命名为pip。名称pip是首字母缩写词&#xff0c;全称为“Package Installer for Python”。自Python3的3.4版本以及Python2的2.7.9版本开始&#xff0c;pip被直接包括在Python的安装包内&#xff0c;成…

学习Java内部类这一篇就够了

目录 1. 什么是内部类2. 内部类分几种2-1. 成员内部类2-2. 局部内部类2-3. 静态内部类2-4. ★匿名内部类 1. 什么是内部类 在Java中&#xff0c;可以将一个类定义在另一个类里面或者一个方法里边&#xff0c;这样的类称为内部类。广泛意义上的内部类一般包括四种&#xff1a;成…

关于先更新再缓存这种缓存方案设计的思考

这两天正在做公司缓存方面的设计&#xff0c;然后就把自己的思考过程整理一下。 网上对于这块的内容讲解也非常的多&#xff0c;有些说的也都非常的在理&#xff0c;关于缓存一致性的方案也就那么几种&#xff0c;如&#xff1a;先更新、再删&#xff0c;先删、在更新&#xff…

MYSQL练题笔记-高级查询和连接-简单题3题

写了下面的前3道题。 一、每位经理的下属员工数量 看到题目就知道和之前的至少有5名下属的经理很相似&#xff0c;嘿嘿写对了就不做过多的讲解了。 二、员工的直属部门相关表和题目如下 刚开始觉得很简单&#xff0c;但是仔细想想这道题有两个输出&#xff0c;觉得想不出来&a…

C语言碎片知识

sizeof 1.sizeof是C语言中的一个操作符&#xff0c;同时也是关键字&#xff01;&#xff01;&#xff01;&#xff01; 2.sizeof的操作数可以是类型&#xff0c;变量或表达式 如图&#xff0c;第一个为什么是6&#xff1f;&#xff0c;因为先计算了3的大小&#xff0c;占4个字…

在JDBC中使用DataSource获取连接

javax.sql.DataSource是java.sql.DriverManager的一个代替&#xff0c;而且建议优先使用DataSource&#xff0c;因为DataSource提供了DriverManager所没有的一些特性&#xff0c;例如连接池、分布式事务。 DataSource是一个接口&#xff0c;它的实现由驱动器的厂商提供&#xf…

菜鸟学习日记(python)——运算符

我们进行运算时&#xff0c;需要两类数据&#xff0c;操作数和运算符&#xff0c;例如&#xff1a;ab就是一个运算&#xff0c;它的操作数是a和b&#xff0c;运算符是‘’ 在python中运算符包括以下几大类&#xff1a; 算数运算符比较&#xff08;关系&#xff09;运算符赋值…