- 博主链接:张立梵的爬虫开端
- 个人介绍:小编大一视传在读,目前即将大二
- 欢迎大家对文章
关注
、点赞
、收藏
最近小伙伴问我有什么刷题网站推荐,我在这里推荐一下牛客网,这里面包含各种题库,全都是免费的题库,可以全方面提升你的数据操纵逻辑,提升编程实战技巧,赶快来一起刷题吧牛客网笔试题库|面试经验
目录:
网络爬虫与http+ssl
端口
通讯协议
osm模型
封包与解包的过程
抓包工具
请求方式
红点
网络请求模块
get请求方式与post请求方式
User-Agent用户代理
urllib模块
urllib.request
urllib.parse
查看IP的方式:打开命令行输入cmd,然后在端口中输入ipconfig,可以看到IP地址
端口号mysql 3306 mongodb 27017 nosql,端口号为独立标识
TCP通信协议/IP协议/Robot协议(规定爬虫不能爬取这个协议的文件)在srapy框架
超文本传输协议,端口80(HTTP协议)设置—网络—属性—看到已安装的协议,可以在这里添加新的协议
⽬标Objective;策略Strategy;衡量指标Measurement
OSM模型,就是把宏⼤的⽬标拆解,对应到部门内各个⼩组具体的、可落地、可度量的⾏为上,从保证执⾏计划没有偏离⼤⽅向。
http访问更快因为是明文传输就是不需加密,国家税务总局就是http,是没有加证书的
https=http+ssl为加密的过程,是一个安全版的访问过程,是加了证书的
HTTP请求与响应
客户端的请求与进行与服务器的请求与进行,个人手机电脑是客户端
全球统一资源定位符(URL)
html文件,学了前端才能看懂源代码,网页会根据HTML
css文件处理格式,位置
js处理跳转,点击事件,动画效果,走马灯
images文件,图片存放点
(F12弹出抓包工具)
(Ctrl+u页面源码)
elements元素
console控制台,js语法(全称javascript)
sources资源(js解密用)
network网络数据包XHR动态加载
这个如果是动态页面这个request就要使用Ajax请求动态加载json文件数据(Ajax异步加载)静态页面的网页都在源代码中。
general全部的请求头
response headers服务器的是交投
request headers请求对象的请求头客户端的请求
host主机和端口号
user—agent标识,如果不带服务器,会认为你是一个自动化的爬虫程序
cookie有时间限制(动态)记录用户信息
referer副级的URL
GET请求 (用于向服务器查询某些信息)
POST请求(数据隐藏)Payload—form data隐藏的数据,百度翻译为post请求
stop recording network log 停止记录网络日志
clear,清空网络日志
preserve log,保留日志
disable cache禁用缓存(js逆向需要进行调试用)
get请求
从服务器获取数据 没有对服务器产生影响 通常都是get请求、
请求参数在url地址上显示,时间戳就是后面的各种参数
post请求
向服务器发送数据 会对服务器产生影响 通常都是post请求
请求参数不会在url上显示
就像百度翻译翻译一样他是一个动态加载数据,有道翻译是ajax请求,真正的URL在XHR里
作用就是伪装爬虫记录用户数据,这会作为反反爬的第一步,更好的获取完整的HTML源码
urllib是python的一个内置的网络请求模块 ,内置函数还有很多如time random等
有时候需要结合我们的requests模块去综合使用 urlretreieve参数说明 url: 外部或者本地的url
遇到这样的如何获取源码
url= 'https://tieba.baidu.com/f?ie=utf-8&kw=海贼王' url= 'https://tieba.baidu.com/f?ie=utf-8&kw=%E6%B5%B7%E8%B4%BC%E7%8E%8B'(16进制)
第一种方法
#urlencode
传入参数类型:字典
r = {'wd':"海贼王"}
对r这个字典进行解码操作
result = urllib.parse.urlencode(r)
print(result)
wd=%E6%B5%B7%E8%B4%BC%E7%8E%8B
kw=%E6%B5%B7%E8%B4%BC%E7%8E%8B
%E6%B5%B7%E8%B4%BC%E7%8E%8B
第二种方法 quote
r = '海贼王'
result = urllib.parse.quote(r)
print(result)
z_l = 'https://tieba.baidu.com/f?ie=utf-8&'+ result # 拼接
print(z_l)
urllib.request.urlopen("网址") 向网站发起一个请求并获取响应
字节流 = response.read()
字符串 = response.read().decode("utf-8")
urllib.request.Request"网址",headers="字典") urlopen()不支持重构User-Agent
read() 读取服务器响应的内容
getcode() 返回HTTP的响应码
geturl() 返回实际数据的URL(防止重定向问题)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 51-53: ordinal not in range(128) 报错信息 urllib网络请求模块在想一个携带了中文的url发送请求的时候可能会出现问题。
方法就是转成16进制
urlencode 传入参数类型:字典 功能:将存入的字典参数编码为URL查询字符串,即转换成以key1=value1&key2=value2的形式
enquote对url进行解码,把类似"%xx"的字符替换成单个字符
import urllib.request
url = 'https://www.baidu.com/'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
}
1 创建req请求对象并构建headers
req = urllib.request.Request(url,headers=headers)
print(req) #
2 获取响应数据
response = urllib.request.urlopen(req)
3 读取响应内容
html = response.read().decode('utf-8')
print(html)
getcode() 返回HTTP的响应码
print(response.getcode())
geturl() 返回实际数据的URL(防止重定向问题)
print(response.geturl())
大家一起来牛客刷题吧!