Python 认识爬虫
学习,从开始准备,愿意动手动脑去看,去学习,去敲代码,去复习,去写笔记。完成了这整个流程,才知道自己也可以做得到得。别笑话我,我是很懒,所以现在没什么成就,但是现在知道要好好学习了,应该不算晚。别人都坐飞机了,自己还在蹬自行车,还是得自律起来,好好学习。互勉。好像扯远了。抱歉
前言
爬虫,现在网络上很火得名词。在这个大数据时代,数据决定了很多东西,从而获取数据,分析数据得工具或者方法就成了香饽饽得东西,从而市场就越发大了(以前也有,只不过没有那么显眼)。并且现在配合AI智能,让以前更多自动化的需求和想法都很容易就实现了。
一、爬虫是什么?
个人理解:自动化数据获取,整理和分析,模拟人类的操作,代替人类手动的参杂,快速生成我们需要数据。
不过毕竟只是工具 ,真正实施和操作的还是背后的人。所以爬虫也不是万能的。
1.爬虫分类
爬虫基本分为以下三类(以网页为例子):
普通爬虫:获取整个页面的数据
聚焦爬虫:从整个页面的数据中获取重要的部分数据
增量爬虫:从网页中获取网页中更新后的数据
二、网络基本需要知道的
1.了解网络
什么是协议:是计算机之间为了是西安网络通信而达成的一种规则和约定
http : 超文本/标记语言/html 传输 协议
Get : 向服务器拿数据 没有数据限制
POST : 向服务器上传数据 有字节限制
提示: 上概括的比较简单,实际上里面有很多知识点,这里先做做笔记,后面自己再针对自己的不知道,做下新的笔记
2.请求数据的基本流程和方法
1: 要知道你想找数据的 网页 url,就是一个网页地址
2: 通过链接 请求,定位到你想要的页面
3: 通过正确的请求地址,进行请求,接收到回应,返回文本
4: 将数据进行处理,显示或者保存在本地,自己再处理数据
# Response 响应
# Request 请求
# Headers 请求头
# 发起请求的过程
# 请求行(url 协议 请求方式get)
# 请求头(头部信息 User-Agent)
# 请求体(请求参数)
# 由用户输入URL开始,附带需要请求的参数信息(请求类型通常为GET,通过http协议发送到服务器。
# 然后服务器将请求进行处理后生成响应,通过http协议返回到客户端。
# 客户端解析后,会通过状态码告诉请求的结果的类型(成功,失败或者其他类型)
# 客户端会根据返回的html和Jason数据渲染成客户端可视化的数据呈现在界面上
三.request请求
上面说到有Get()和Post()这两中请求的方法,下面试下一下简单的用法:
提示:在对应的网页上右键-检查-网络-Fetch/XHR在选项中,选中自己请求的那个链接,就会出现,标标头,负载,预览,响应等等信息,脚本中需要配置的参数或者格式都可以在上面找到。
1.Get()
import requests
url = 'https://www.baidu.com'
# 向目标网站发起请求,并获取数据
resp = requests.get(url)
# 出现乱码,1:查看编码方式, 2:设置请求指定编码方式
resp.encoding = 'utf-8'
print(resp.text)
上面使用到了Get(),传入一个网页地址,即可获取到了整个页面的文本数据
当然,我们在模拟网页请求数据的时候,往往是携带了很多参数和配置进行请求的。
如下脚本:
import requests
from urllib.parse import urlencode
# 浏览器的标志,这个基本是必带的参数,可以从网页上面复制下来就行
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.50",
}
url = 'https://www.duitang.com/search/?'
# 这个就是根据你所请求的网页链接中是否需要携带参数,需要就加上
params = {
'kw': '美女',
'type': 'feed'
}
# urlencode 将字典对象转化为url请求参数
# 如果不需要携带参数的话,这里就不需要用到拼接了
url = url + urlencode(params)
# 向目标网站发起请求,并获取数据,headers添加伪装
resp = requests.get(url, headers=headers)
# 这里是设置请求的编码,返回文本如果格式相同就不会成乱码了
resp.encoding = 'utf-8'
print(resp.text)
2.Post()
如下脚本:
import requests
import json
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.69",
}
# post请求
url = "https://fanyi.baidu.com/v2transapi?from=zh&to=en"
# 以下数据都是基于我的电脑请求时生成的表单数据,不是固定的,所以自己生成还需要自己去找。
data = {
"from": "zh",
"to": "en",
"query": "大家好",
"transtype": "realtime",
"simple_means_flag": "3",
"sign": "自己浏览器生成的,自己找到替换此文本",
"token": "自己浏览器生成的,自己找到替换此文本",
"domain": "common"
}
response = requests.post(url, headers=headers, json=data)
print(json.loads(response.text))
这里的Post(),用法跟Get()差不多,只是需要携带需要上传的参数data就行。
总结
上面基本的说的很粗糙,后续有时间我再改改,就是笔记记下来,让自己复习的时候,能偶尔看下,mark下。