爬虫之爬虫介绍、requests模块、携带请求参数、url 编码和解码、携带请求头

爬虫介绍

爬虫是什么?

  • 网页蜘蛛,网络机器人,spider
  • 在互联网中 通过 程序 自动的抓取数据 的过程
  • 根上:使用程序 模拟发送http请求 ⇢ \dashrightarrow 得到http响应 ⇢ \dashrightarrow 把响应的数据解析出来 ⇢ \dashrightarrow 存储起来

做爬虫需要掌握的技术

  1. web端爬虫(网页)
    1. 抓包:抓包工具 ⇢ \dashrightarrow 浏览器,charles,fiddler
  2. 发送http请求的模块
    • requests:同步的 ⇢ \dashrightarrow 不仅仅做爬虫用 调用第三方api就可以使用
    • request-html:
    • aiohttp:异步的http模块
  3. 解析库:http响应 ⇢ \dashrightarrow 可能是xml,html,json,文件,图片… ⇢ \dashrightarrow 响应中解析出想要的数据
    • beautifulsoup4 ⇢ \dashrightarrow xml/html
    • lxml ⇢ \dashrightarrow xml/html
    • selenium ⇢ \dashrightarrow 请求加解析(本质是模拟浏览器)
    • json
  4. 存储:mysql,redis,es,mongodb…
    • pymysql:aiomysql
    • redis:aioredis
    • elasticsearch.py
    • py-mongo
  5. 移动端爬虫(app)
    • 抓包,发请求,解析,存储跟web一样的
    • 对app进行反编译 ⇢ \dashrightarrow jadx
      • 安卓:java写的app ⇢ \dashrightarrow 把app反编译成java ⇢ \dashrightarrow 懂java ⇢ \dashrightarrow 看懂逻辑 ⇢ \dashrightarrow 使用python模拟这个过程
    • hook技术 ⇢ \dashrightarrow frida
    • c语言写加密—》用java调用c语言的加密方式—》xx.so–>动态链接库文件
      • 反编译 so文件—》IDA—》反编译成汇编和c
      • 动态调试
    • python模拟这个过程即可
  6. 反扒
    • 请求头反扒:user-agent,referfer:上一个访问的地址是什么
    • 反扒:无限调试
    • 封ip ⇢ \dashrightarrow ip代理池
      -封账号 ⇢ \dashrightarrow cookie池
      -js加密 ⇢ \dashrightarrow js逆向

动态链接库

百度,谷歌 搜索引擎本质其实就是个大爬虫 ⇢ \dashrightarrow 不停的在互联网上爬取页面 ⇢ \dashrightarrow 存到自己的库中
使用搜索的时候 ⇢ \dashrightarrow 去百度的数据库中查询相关的关键字 ⇢ \dashrightarrow 显示在页面上 ⇢ \dashrightarrow 当我们点击某一个 ⇢ \dashrightarrow 真正的跳转到 真正的搜索到的页面

百度做爬取时 ⇢ \dashrightarrow 对动态页面的爬取权重要低
seo优化 ⇢ \dashrightarrow 保证我们公司的网站通过关键字搜索,显示在第一个
- 伪静态 ⇢ \dashrightarrow
sem:付费买关键词

requests模块快速使用

介绍:

使用requests可以模拟浏览器的请求,比起之前用到的urllib(内置模块),requests模块的api更加便捷(本质就是封装了urllib3)

注意:

requests库发送请求将网页内容下载下来以后,并不会执行js代码,这需要我们自己分析目标站点然后发起新的request请求

  1. 混合项目 ⇢ \dashrightarrow 拿回来的页面—带数据
  2. 分离项目 ⇢ \dashrightarrow 拿回来的页面 ⇢ \dashrightarrow 数据是空的 ⇢ \dashrightarrow 再分析接口 ⇢ \dashrightarrow 再发请求才能拿到真正的数据

看到一个页面有数据 ⇢ \dashrightarrow 用requests发送请求 ⇢ \dashrightarrow 拿回来的,可能跟看到的不一样

快速使用

  1. 安装模块:pip install requests
  2. 使用:
    import requests
    
    # res中会有:http响应  响应头的,响应体的
    res = requests.get('https://www.cnblogs.com/')
    
    # 响应体的文本字符串(可能会乱码)
    print(res.text)```
    

get请求携带请求参数

  1. 方式一:直接拼在后面
    res=requests.get('https://www.cnblogs.com/?ordering=-id&search=课程')
    
  2. 方式二:使用params参数
    res=requests.get('https://www.cnblogs.com/',params={'ordering':'-id','search':'课程'})
    print(res.text)
    

url 编码和解码

获得的网页内容可能会出现:%E7%BE%8E%E5%A5%B3
不是乱码 ⇢ \dashrightarrow url编码了

url解码

res=parse.unquote('%E7%BE%8E%E5%A5%B3')
print(res)

url编码

res=parse.quote('刷币')  

# %E5%88%B7%E5%B8%81
print(res)

携带请求头

请求头中可能有的:User-Agent,referer,cookie,Host

  1. User-Agent:是消息头,可以在该消息头内了解到该网站所支持的浏览器同时可以知道访问该网站所用的浏览器以及浏览器版本,还能了解登录用的操作系统以及系统是多少位的。
  2. referer:代表从哪里来到当前页面进行访问的,百度推广就是通过referer进行的统计来访人数。不带referer可以直接下载带referer说明有防盗链。
  3. host:代表主机已百度为例,网址中www.baidu.com的host就是www.baidu.com
    http1.1后面的1.1代表版本的协议号 ,分为1.0和1.1两个版本,发部分使用1.1版本,且 1.1版本必须要host请求头
header = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36'
}
res = requests.get('https://www.sogou.com/web?query=%E7%BE%8E%E5%A5%B3', headers=header)
# res=requests.request('get','url',headers=header)
print(res.text)

你可能感兴趣的:(爬虫,爬虫)