get和post&url说明
- get特点
一般情况下,只从服务器获取数据,没有对服务器产生影响,通常都是get请求,请求参数可以在url地址上显示出来
- post特点
向服务器发送数据,会对服务器产生影响,通常使用post请求
- url(全球统一资源定位符)
https://new.qq.com/omn/TWF20200/TWF2020032502924000.html
https 网络协议
new.qq.com host
omn/TWF20200/TWF2020032502924000.html 访问资源路径
anchor 锚点 前端用来做页面定位的
Referer和cookie说明
-
User-Agent 用户代理
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36
作用:记录了用户的浏览器、操作系统等 为了让用户更好的获取HTML页面的效果
一般会作为 反反爬的第一步 -
Referer
表明当前的这个url是从哪个url过来的 通常也是反反爬的一种
https://movie.douban.com/top250 首页
https://movie.douban.com/subject/1292052/ # 肖申克救赎详情页的url
- cookie
记录用户相关的信息
HTTP协议本身是无状态的 服务器无法判断用户的身份
爬虫里面cookie的作用?
1 反反爬
2 模拟登录
import requests
url = 'https://movie.douban.com/subject/1292052/'
referer = 'https://movie.douban.com/top250'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36',
'referer': 'https://movie.douban.com/top250'
}
response = requests.get(url, headers=headers)
header = response.request.headers
print(response)
状态码和抓包工具说明
- 状态码
301 永久重定向
www.jd.com
www.jingdong.com 重定向到了 jd
302 临时重定向
www.zhihu.com
https://www.zhihu.com/signin?next=%2F 临时重定向到了登录的界面
- 抓包工具(谷歌浏览器自带的)
Elements 元素 网页源代码(最终页面渲染的结果) 提取数据和分析数据
Console 控制台 后期来分析js代码的时候 可以通过打印的结果来找规律 (前期用不到)
Sources 资源 信息的来源 整个网站价值的资源 分析js代码的时候使用 调试 打断点(前期用不到)
NetWork 网络工作(数据抓包)
urllib模块的说明
-
urllib是什么?
Python内置的一个网络请求模块 类似 re time random os
-
为什么要学习它呢?
对比的去学习第三方的(学习方法 你去总结哪些方法对于你本身比较实用)
有些爬虫项目 用的就是urllib (github下载一些项目)
有的时候需要 urllib + requests 二者配合使用
urllib.request的使用
把网络上的图片保存到本地
from urllib import request
url = 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2F1812.img.pp.sohu.com.cn%2Fimages%2Fblog%2F2009%2F11%2F18%2F18%2F8%2F125b6560a6ag214.jpg&refer=http%3A%2F%2F1812.img.pp.sohu.com.cn&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1624863122&t=e0ab3e35ec160c7887508edfcc08f30d'
request.urlretrieve(url, 'xs.png')
urllib.request的使用
urllib.request.urlopen('网站') / 请求对象
# 作用: 向网站发起请求获得响应
# response为响应对象
# TypeError: urlopen() got an unexpected keyword argument 'headers'
# urlopen() 不支持构建 User-Agent
# headers = {}
# response = urllib.request.urlopen('https://www.baidu.com/')
# # read() 方法把相应的对象里面的内容读取出来
# # 通过打印的结果发现问题了 1 打印的数据是字节流 2 数据不对
# html = response.read().decode('utf-8')
# print(type(html),html)
# 创建请求对象并且可以构建User-Agent
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/90.0.4430.212 Safari/537.36'
}
# 1 创建请求对象 构建User-Agent
req = urllib.request.Request(url,headers=headers)
# 2 获取响应对象 urlopen()
response = urllib.request.urlopen(req)
# 3 read().decode('utf-8') 读取响应对象的呢日用
html = response.read().decode('utf-8')
print(html)
urllib.parse的使用
import urllib.parse
# 第一种方式 urllib.parse.urlencode(r) r需要传递是字典类型
r = {'wd':'海贼王'}
result = urllib.parse.urlencode(r)
# print(result)
f_url = 'https://www.baidu.com/s?' + result
print(f_url)
# 第二种
r = '海贼王'
result = urllib.parse.quote(r)
# print(result)
f_url = 'https://www.baidu.com/s?wd=' + result
print(f_url)