网络数据采集

网络数据采集

网络数据采集就说爬虫,爬虫程序就被称为蜘蛛程序spider

定义:

模拟浏览器上网,批量获取数据,获取的是既有数据

合法性:

爬虫本身不被法律禁止,但是具有违法的风险

不能影响网站是正常运营

不能攻击服务器

不能获取个人信息

反爬机制

网站设置一些机制,防止爬虫程序对数据的获取

验证  请求是否为浏览器
ip 请求过于频繁
需要登陆者的情况才能获取数据
反反爬策略

爬虫程序中针对反爬机制涉及对应的反反爬策略

添加请求头—构建—字典—user-agent----键 值 分别加引号

response.请求方式()

response = request.get(url,header=构造好的请求头)

伪装浏览器
休眠  代理ip  轮流使用   消费
登录  cookie
客户端和服务器端

客户端:供用户使用

服务器端:客户端显示的数据都是来源于服务器,服务器端给客户端提供数据

请求request和响应response–双R

客户端通过IP地址进行定位服务器,向服务器传递信息,发送一个请求,这个过程就是请求过程

服务器接受请求之后,查询相关的数据,找到对应的数据,返回给客户端,这个过程就是响应

请求方式

常见的两种 get post

get请求

明显特点 请求参数直接拼接url【网址上】 ?key=value&key=value,请求参数直接暴露,不安全

post请求

不会把请求参数直接拼接在url上,参数不会暴露出来,对比get请求更安全

URL

网址的专业术语是URL,称为统一资源定位符

通过网址定位对应的资源,只能是这个资源

格式:协议://域名或者ip地址:端口/资源路径?key=value&key=value

协议:信息的传递需要遵守一定的柜子,这个规则就是协议,http https

域名或者ip 定位服务器地址

资源路径 明确获取的资源在服务器的哪个位置

?key=value&key=value 请求参数

http协议

超文本传输协议,是网络数据通信的基础

http

httpshttp 的基础上做了ssl加密,保证数据传输更安全

http协议又被为请求-响应协议,客户端和服务器端请求与应答的标准

客户端向服务器传递信息称为请求,发请求的时候,携带请求报文

请求报文的组成部分

请求行 请求头 空行 请求体

请求行  
 	请求方式   资源路径    协议/版本号  
		GET 	/s      HTTP/1.1
请求头 
	User-Agent:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36
	用户代理 
	存储的是和操作系统、浏览器相关的信息
	存储的是设备信息  

    Cookie:
    BIDUPSID=CCA1EE0B899728C008C56A1E68CDC1F1; PSTM=1692545075; BAIDUID=CCA1EE0B899728C0BBFD543EB8ABBE27:FG=1; 
	存储的是和登录者相关的信息 

空行
	分隔请求头和请求体
	请求头和请求体 都是 key:value 格式 

请求体
	请求参数 network-document- playload-储存的请求参数

服务器将数据返回给客户端,携带响应报文

响应报文组成 部分

响应行 响应头 空行 响应体

响应行 
	协议/版本号   响应状态码   响应状态啊描述信息
	HTTP/1.1      200        OK
响应状态码
	200   响应成功
	403   禁止访问  没有权限
	404   找不见  资源不存在  爬虫会遇到404  url有问题
	418   检测到非正常请求
	500   服务器异常
响应头
	Set-Coolie:BD_CK_SAM=1;path=/
空行
	分隔响应头和响应体
响应体
	响应内容【响应状态码  响应文本数据text  cookie 字节数据  编码方式encoding,apparencoding等】

http本身是无记忆协议,需要cookie进行辅助记忆

当第一次进行访问,服务器一定是不认识的,给一个身份标识,放在set-cookie中,随着响应报文一起返回给客户端,当客户端接受到响应报文之后,获取set-cookie的身份标识,存储在客户端,下一次再发送请求的时候,客户端会将身份标识放在cookie中,随着请求报文一起发送给服务器,服务器接受到之后,检测里面有身份标识,登记为一个登陆者身份。

爬虫的流程

​ 1.指定url 来源:网址栏粘贴出来;来源于页面的解析-图片的链接-页面中解析出来的图片的链接

​ 2.发送请求,接受响应,获取响应数据 两个模块 用来发送请求 requests selenium

request:三方模块、需要下载、pip install requests 、文件起名不要叫request

发送请求:requests.请求方式();response=requests.get(url)

获取响应数据: 响应状态码–response.stauts_codes

​ 文本数据-response.text

​ 字节数据-response.context

获取服务器响应的编码方式

获取内容的真是编码方式

​ 3.解析数据【获取想要的数据】正则解析 bs4解析 xpath解析

正则: re模块

​ 在字符串中匹配满足条件的所有-字符串中-字符串-data = response.text

​ re.find(正则表达式,data) ----返回结果是列表,想要某部分内容

​ 4.保存数据 图片【视频、音频】html文件 txt文件 excel文件 csv文件 数据库

下载图片

1.指定url

2.对url发请求 接受响应 获取响应数据

3.解析数据【图片的连接】

4.数据保存 【】


  1. 获取图片的链接
  2. 对图片链接发请求 接受响应 获取图片的字节数据
  3. 将字节数据写入到文件

wget模块 三方模块 下载 pip install wget

HTML的结构

html是由标签组成

单标签 <标签名称 属性名=值 属性名=值 属性名=值 /> / 可以省略

双标签 <标签名称 属性名=值 属性名=值 属性名=值>标签之间的内容</标签名称>

标签与标签之间可以相互嵌套:

三种关系

  1. 父子关系 : 直接包含与被包含
  2. 兄弟关系: 被同一个父标签包含
  3. 先辈与后辈关系:直接或者间接包含与被包含 【包含父子】
<!DOCTYPE html>     声明这是一个html文档
<html lang="en">
    <head>
        <meta charset="UTF-8">  指定编码方式的  
        <title>Title</title>
    </head>
    <body>

    </body>
</html>
css选择器解析
bs4  全称 BeautifulSoup4  
bs4  从html中提取数据  
三方模块  需要下载  pip install bs4  

解析原理 
1. 实例化一个 BeautifulSoup对象,把页面的源码数据加载到该对象中
2. 通过调用方法进行标签的定位与内容的提取  【重点  定位标签 思路:找到一个能够进行唯一定位的位置 】


使用步骤 
from bs4 import BeautifulSoup
1. 获取页面的源码数据    --  data = response.text   字符串
2. 实例化一个 BeautifulSoup 对象
   BeautifulSoup(data,解析器)
   html_data = BeautifulSoup(data,'html.parser')  
   html_data  标签
3. 进行标签定位
   html_data.select(css选择的语法)   找所有 
   html_data.select_one(css选择的语法)  找一个

css选择器 

1. id选择器 
   标签中具有id属性    id值在html中的是唯一  
   通过id值唯一定位到这个标签
   <div id="haha" class="heihei">
   
   使用方式  #值    
   #haha

2. class选择器  类选择器 
   标签中具有class属性   class值可以有多个   html中可以有多个相同的class对应的值 
   配合搜索情况  ctrl+F  如果搜索出来个数是1 表示唯一
   <div class="heihei">
   
   使用方法  .值
   .heihei  -- 表示 定位到具有class=heihei的标签 
   
   但是 
   <div class="heihei huhu">  多个之间使用空格分隔 
  	使用类选择器  只能选择其中的一个值使用  选择更能够进行唯一定位的  
  	.heihei   
  	.huhu    

3. 包含选择器    父子关系   先辈与后辈关系 
	父子关系   >      父选择器>子选择器
	先辈与后辈  空格     父选择器 子选择器 
	
4. 标签选择器  元素选择器
	直接使用标签名称进行定位
	<div class='haha'>
	<p class='haha'>
	div 

5. 兄弟选择器    兄弟关系
	~  
		A~B
		选择A标签后的所有的B标签
	
	+ 
		A+B
		选择A标签后紧邻的那一个兄弟B
6. 属性选择器 
	属性 -- 标签名称后 以key=value  中key都叫属性 
	属性中 id  class 比较特殊 赋予两个单独的符号  #  .
	id  class 也是属性  也可以用于属性选择器 
	
	选择器[属性名]   具有某个属性名 且选择器对应的标签  
		div[content]  找具有content属性的div标签 
	
	选择器[属性名=值]  具有某个属性名且对应的值为指定内容的选择器
		div[content="haha"] 找具有content属性并且对应的值为haha的div标签 
	
	选择器[属性名^=指定内容]  具有某个属性名且对应的值以指定内容开头的选择  
		div[content^="h"]  找具有content属性并且对应的值以h开头为h的div标签 
	
	选择器[属性名$=指定内容]  具有某个属性名且对应的值以指定内容结尾的选择  
		div[content$="h"]  找具有content属性并且对应的值以h结尾为h的div标签 
		
	选择器[属性名*=指定内容]  具有某个属性名且对应的值包含指定内容的选择  
		div[content*="h"]  找具有content属性并且对应的值包含h的div标签 

7. 结构选择器  
	找某个选择器下的第n和或者倒数第n个 
	
	第一个  
		父选择器>子选择器:first-child
	第n个 
		父选择器>子选择器:nth-child(n)
	倒数第一个 
		父选择器>子选择器:last-child
	倒数第n个 
		父选择器>子选择器:nth-last-child(n)
		
	注意:执行顺序  
		先找负选择器中的第n个  验证是否满足子选择器 
		
	举例 
		父亲 
			儿子
			女儿
			儿子
			女儿
			女儿
			女儿
			
		父亲>儿子:last-child   找不到 
			找父亲的最后一个孩子  验证是否是儿子  如果是 找到了  如果不是  找不到  
		
		父亲>女儿:first-child  
        
        
        父亲>女儿:nth-last-child(2)

8. 全局选择器 
	* -- 任意  
	
	*[content] 
		所有具有content属性的标签 
获取详情页数据
  1. 获取详情页链接 解析出来
  2. 对详情页链接发请求 接相应 获取响应数据
  3. 解析数据

JSON数据

是一种轻量级的数据交换格式,常用于服务器向客户端传输的一种格式

要进行网络传输,最终的数据类型都是字符串,还得是具有一定格式的字符串,也就是JSON数据

常见的格式

[{key:value,key:[]},{key:value},{}]
{key:[],key:value,key:[]}

序列化和反序列化

序列化:将程序中的对象【字典包列表或者列表包字典】转化为字符串,还可将内容存储到文件中

反序列化:将字符串【可以是文件中内容】转化为程序中的对象

python中提供进行序列化和反序列操作的模块 json

序列化  
    json.dump
    json.dumps

反序列化
    json.load
    json.loads


不带s的一组 和文件相关  
  • 18
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值