网络爬虫相关

一、爬虫的基础内容

1、基本概念和用途

1.1、概念:

  • 模拟浏览器、发送请求,获取响应。(只能获取客户端所展示出来的数据)

1.2、特点:知识碎片化,针对不同的网站对应的方法也不同。

  • 爬虫:模拟客户端访问,抓取数据。
  • 反爬:保护重要数据,阻止恶意网络攻击
  • 反反爬:针对反爬的措施。

1.3、作用

  1. 数据采集
  2. 软件测试
  3. 抢票
  4. 网络安全
  5. web漏洞扫描

2、爬虫的分类

2.1、根据爬取网站的数量,可以分为

2.1.1、通用爬虫

①特点:爬取网站数量没有上线。

示例:搜索引擎

2.1.2、聚焦爬虫(*)

①特点:爬取网站数量有上限,有明确的目标。

②分类:

功能性爬虫

①特点:不获取数据,只为实现某一功能。

示例:投票 / 抢票 / 短信轰炸等。

数据增量性爬虫

①特点:获取数据用于后续分析

②分类

  • url与数据同时变化 -- 整条新数据
  • url不变,数据裱花 -- 数据部分更新

3、爬虫的基本流程

3.1、流程

  • url(网站资源定位符)
  • 对url发送网络请求,获取网络请求的响应
  • 解析响应,提取数据
  • 保存数据
3.1.1、确认目标:目标url:www.baidu.com
3.1.2、发送请求:发送网络请求,获取到特定的服务端给你响应。
3.1.3、提取数据:从响应中提取特定的数据 jsonpath / xpath / re
3.1.4、保存数据:本地(html、json、txt)、数据库

获取到的响应中,有可能会提取到还需要继续发送请求的url,可以拿着解析到的url继续发送请求

robots协议并不是一个规范,只是约定俗成。

二、http协议以及请求头

1、网络通信

1.1、步骤

  • 电脑(浏览器): url -- www.baidu.com 域名
  • DNS服务器:IP地址标注服务器,返回响应
  • DNS服务器返回IP地址给浏览器
  • 浏览器拿到IP地址去访问服务器,返回响应
  • 服务器返回给我们的响应数据:html / css / js / jpg......

1.2、实际原理

一个请求只能对应一个数据包(文件)

2、http协议和https协议

2.1、http协议(超文本传输协议)

  • 超文本:不仅仅限于文本,还包括图片、音频、视频。
  • 传输协议:指使用共用约定的固定格式来传递转换成字符串的超文本内容。
2.1.1、作用
  • 规定了服务器和客户端互相通信的规则。
2.1.2、http请求/响应的步骤
  • 客户端连接到web服务器
  • 发送http请求
  • 服务器接受请求返回响应
  • 释放连接tcp连接
  • 客户端解析html内容
2.1.3、请求头

请求方式:get 和 post

get:向服务器要资源

post:向服务器提交资源

  • User-Agent:模拟正常用户
  • cookie:登录保持
  • referer:当前这一次请求时由哪个请求过来的

抓包得到的响应内容才是判断依据,elements中的源码是渲染之后的源码,这个不能作为判断标准。

2.1.4、字符串编码解码

编码 -- encode()

字符串转换成二进制字符串 str 转换成 bytes

解码 -- decode()

二进制字符串转换成字符串 bytes 转换成 str

三、requests库的介绍

1、requests基本使用

requests模块作用:发送http请求,获取响应数据。

requests模块式第三方模块,需要安装:

1.1、安装命令: -- pip install requests
1.2、基本使用:
python 复制代码
import requests

# 目标url
url = 'https://www.baidu.com'

# 向目标url发送get请求
response = requests.get(url)

# 打印响应内容

#将其编码设置为UTF-8
response.encoding = 'utf-8'

print(response.text)

# print(response.content.decode())    默认UTF-8解码

使用requests库保存图片:

python 复制代码
import requests

# 确定url
url = 'https://img0.baidu.com/it/u=3225468693,477076843&fm=253&fmt=auto&app=138&f=JPEG?w=1115&h=800'

# 发送请求,获取响应
res = requests.get(url)
print(res.content)

# 保存响应
with open('1.jpg', 'wb') as f:
    f.write(res.content)
1.3、常用的属性或方法
  • response.url 响应的url。有时候响应的url和请求的url并不一致。
  • response.status_code 响应状态码。
  • response.request.headers 响应对应的请求头。
  • response.headers 响应头
  • response.cookies 响应的cookie(经过了set-cookie动作。返回cookieJar类型)
1.4、其他属性

response.text 和 response.content 的区别:

text: str类型, requests模块自定根据http头部对响应的编码作出有根据的推测。

content: bytes类型, 可以通过decode()解码。

2、用户代理

请求头中user-agent字段必不可少,表示客户端操作系统以及浏览器的信息。

示例

python 复制代码
import requests

url = 'https://www.baidu.com/'

# 构建请求头
header = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36'
}

# 带上user-agent发送请求
# headers参数接受字典形式的请求头,请求头字段名为key,值为value
response = requests.get(url, headers=header)

print(response.content.decode())

添加user-agent的目的是为了让服务器认为是浏览器在发送请求,而不是爬虫在发送请求

相关推荐
小白学大数据26 分钟前
Python爬虫:从人民网提取视频链接的完整指南
大数据·开发语言·爬虫·python·音视频
莓事哒1 小时前
数据采集技术之python网络爬虫(中国天气网的爬取)
爬虫·python·pycharm
shix .2 小时前
爬虫一些基础知识的备忘录(需要自取)
c++·爬虫·python
xinxinhenmeihao5 小时前
python爬虫碰到IP被封的情况,如何解决?
爬虫·python·tcp/ip
WeiLai111210 小时前
面试基础---订单系统设计深度解析:分库分表、延迟任务与订单状态机
java·分布式·后端·爬虫·面试·职场和发展·架构
q5673152310 小时前
用PHP的Guzzle库编写的图片爬虫程序
android·开发语言·爬虫·http·golang·php
qq_3325394514 小时前
如何绕过 reCAPTCHA V2/V3:Python、Selenium 与其他工具的实战指南
android·前端·爬虫·python·selenium·网络爬虫·爬山算法
小爬虫程序猿1 天前
衣联网的商品列表页面结构是怎样的?
开发语言·爬虫·python
qq_332539451 天前
Akamai 与 AWS 风控分析与绕过技术探讨
爬虫·算法·安全·云计算·网络爬虫·aws