数据包分析
Request Headers
:authority: www.google.com.hk # 请求的域名(对方的服务器地址)
:method: GET # 请求方法,一般浏览器访问网站使用GET请求
:path: /?gws_rd=ssl # 请求路径,也就是 https://ww.google.com.hk/ 后面的内容
:scheme: https # 请求的协议,这里使用https协议(使用SSL加密的http协议)
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng响应头,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
# 请求文件类型,可以吧这里的文件类型Google一下,因为篇幅太长这里就不做详细介绍了(如text/html是文档/HTML文档的意思)
accept-encoding: gzip, deflate, br # 压缩类型,支援gzip,deflate,br 压缩方式
accept-language: zh-HK,zh;q=0.9 # 浏览器语言,我的默认语言是 zh-hk (中国-香港)
cache-control: no-cache # 缓存讯息,这里是 不缓存(no-cache)
pragma: no-cache # 缓存来源
sec-fetch-dest: document # sec-fetch-* 意为如何使用返回的参数
sec-fetch-mode: navigate
sec-fetch-site: same-origin
sec-fetch-user: ?1
upgrade-insecure-requests: 1 # 不用在意这个东西
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 Edg/86.0.622.63
# 非常重要的浏览器UA,表明了浏览器的身份:是什么内核,运行在什么系统上
Response Headers
alt-svc: h3-Q050=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-T051=":443"; ma=2592000,h3-T050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
# 标示这个请求使用http/3 (google已经用上h3了啊)
cache-control: private, max-age=0 # 缓存控制:私有(缓存0秒,也就是不缓存)
content-encoding: gzip # 压缩使用Gzip压缩
content-length: 67582 # HTTP消息长度 67582
content-type: text/html; charset=UTF-8 # 返回文件类型 text/html ,字符编码为 UTF-8
date: Tue, 10 Nov 2020 01:06:54 GMT # 服务器的时间
expires: -1 # 链接过期,-1不过期
p3p: CP="This is not a P3P policy! See g.co/p3phelp for more info." #个人隐私安全平台项目,可以去wiki查询一下p3p
server: gws # 服务器名,这个其实可以自定义,一般用于标示自己用的是什么web服务器
set-cookie: 1P_JAR=2020-11-10-01; expires=Thu, 10-Dec-2020 01:06:54 GMT; path=/; domain=.google.com.hk; Secure; SameSite=none
set-cookie: NID=204=Zl-c80ku7NgAF7VKJt84n2Z4DGob3kh9RCnBCaf21NgeIKVA7GsixU8st4FdJvPODEnS_EYoXKbPOrdhxKI_Si4k2PeLInLNoE5KNlBC1DKyZHP1z0GLesmx8sN-H4hFUe3cvrUDJMyUTq6rTyG8DL4X-rRLcgn1Iy32UlaxFDo; expires=Wed, 12-May-2021 01:06:54 GMT; path=/; domain=.google.com.hk; Secure; HttpOnly; SameSite=none
# set-cookie 是给予cookie
status: 200 # 状态码,非必要
strict-transport-security: max-age=31536000
x-frame-options: SAMEORIGIN
x-xss-protection: 0
爬虫分类
- 通用爬虫:使用搜索引擎;优势:开放性,速度快 劣势:目标不明确
- 聚焦爬虫:又称主题网络爬虫 优势:目标明确,对用户需求精准,返回内容明确
- 增量式:翻页,从第一页到最后一页
爬虫步骤
- 确认目标url
- 使用python代码发送请求获取数据
- 解析数据,得到精确的数据 (找到新的url,回到第一步:循环此步骤直到所有页面都已抓取)
- 数据持久化,保存到本地或数据库
这里四步对应后面学习内容,不作说明,后面自会明了
简单爬虫
import urllib.request #导入库
url = 'http://www.baidu.com/' #设置url
requrl = urllib.request.urlopen(url) #访问url
data = requrl.read().decode("utf-8") #读取访问url的数据并解码
print(data) #打印返回页面
爬虫之中文字符转义
import urllib.request #导入库
import urllib.parse
import string
url = 'http://www.baidu.com/s?wd='
str_data = '动漫'
fin_url = url + str_data #拼接url
parse_url = urllib.parse.quote(fin_url,safe=string.printable,encoding='utf-8') #转义中文字符
url_data = urllib.request.urlopen(parse_url).read().decode("utf-8") #访问url
print(url_data) #打印页面
转义中文字符,必须导入的模块 urllib.parse string
其转义为固定搭配
parse_url = urllib.parse.quote(fin_url,safe=string.printable,encoding='utf-8')
爬虫之网址参数的字典格式转义
https://www.baidu.com/s?wd=动漫 我们可以看到这个URL有参数wd=
如果我们需要多个参数的添加,可以使用字典的方法
接下来我们进行学习
import urllib.request
import urllib.parse
import string
url = 'http://www.baidu.com/s?'
params = {
'wd' : '动漫', #参数字典,注意填写格式
'sr' : '123',
'bn' : 'xiaoyang'
}
deal_zd = urllib.parse.urlencode(params) #关键步骤,对字典进行处理否则Python无法访问
#如下步骤不再赘述
deal_url = url + deal_zd
zy_url = urllib.parse.quote(deal_url,safe=string.printable,encoding='utf-8')
url_data = urllib.request.urlopen(zy_url).read().decode('utf-8')
print(url_data)
这里核心步骤非常明显,其功能就是转义字典格式以至于让Python请求访问
deal_zd = urllib.parse.urlencode(params)