请求头headers
常用的几个: user-agent (用户代理) ,referer(页面跳转处),Cookie
几个偶尔用到的:
Content-Type,
Host,(主机和端口号)
Connection,(链接类型)
Upgrade-Insecure-Requests(升级为HTTPS请求)
r.text # 字符串形式r.encoding # 编码方式从 HTTP header中的charset字段获得的
# 如果header中不存在charset, 则默认编码方式为 ISO-8859-1,但是这个编码并不能解析中文。 UTF-8编码是可以解析中文的
r.apparent_encoding # 从响应的内容文本中分析出来的编码方式#所以如果出现了乱码,中文无法正常显示,可以使用:
r.encoding='utf-8'/'utf8' #有时可能不支持中间带个横线的格式
或者 r.encoding=r.apparent_encoding
或者 r.content.decode('utf-8')r.content.decode() #默认 utf-8
其他的几种常见的编码方式: gbk/GBK, gb2312, ascii, iso-8859-1
文章目录
- XPATH
- 代理IP
- JSON格式
- requests.session()
XPATH
from lxml import etree
#创建 element对象
1. tree=etree.parse('test.html') # 将本地的html文档
2. tree=etree.HTML(test) # test是html字符串(bytes或str类型), 转为element对象
# / 表示一个层级, //表示多个层级
r=tree.xpath('/html/body/div')
r=tree.xpath('/html//div')
r=tree.xpath('//div')
# //title/.. ..表示title标签的父标签
# /text() 获取文本(直系标签中的), //text() 是该标签下的全部文本。
# /@href 获取选中标签的href属性
r=tree.xpath('//div[@class="song"]') #通过属性值进行定位
r=tree.xpath('//div[@class="tang"]//li[5]/a/text()') #索引序号是从1开始的
r=tree.xpath('//li[7]//text()')
r=tree.xpath('//div[@class="tang"]//text()')
r=tree.xpath('//li[7]//text()')# 通过子节点的值进行定位
//span[i>200] # i是span的子节点
#通过包含修饰
//div[contains(@id,"qiushi_tag_")]
//span[contains(text(),"一页")]
代理IP
正向代理:知道最终服务器的地址
反向代理:不知道最终服务器的地址
根据匿名度分为:
透明:
# 目标服务器接收到的请求头:
REMOTE_ADDR = proxy IP
HTTP_VIA = proxy IP
HTTP_X_FORWARDED_FOR= YOUR IP
匿名:
REMOTE_ADDR = proxy IP
HTTP_VIA = proxy IP
HTTP_X_FORWARDED_FOR = proxy IP
高匿:(让别人无法发现你是在用代理,效果最好)
REMOTE_ADDR = Proxy IP
HTTP_VIA = not determined
HTTP_X_FORWARDED_FOR = not determined
为了让服务器以为不是同一个客户端在请求 ; 为了防止频繁向一个域名发送请求被封IP, 所以我们需要使用代理IP。
proxies = {
'http/https':'http/https://IP地址:端口号'
}
r=requests.get(url,proxies=proxies)
verify参数忽略CA证书
r=requests.get(url,verify=False)
JSON格式
json 是数据打包的一种格式。
json 本质上是字符串。
json 的格式要求必须且只能使用双引号作为key或者值的边界符号,不能使用单引号,而且“key”必须使用边界符(双引号)。
json 的key只能是字符串,json的字符串强制双引号,dict可以嵌套tuple,json里只有数组/列表。
json 中文必须是unicode编码。
json 的类型是字符串,字典的类型是字典。
json.dumps() 字典 --> json字符串
json.loads() json --> 字典import json
a=json.loads('{"a":"1","b":"2"}') json --> dict
print(a)
参考文章:
https://www.cnblogs.com/kadycui/p/10344849.html
https://blog.csdn.net/qq_43422918/article/details/89521724?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0.control&spm=1001.2101.3001.4242
https://blog.csdn.net/lelemom/article/details/89449670?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control
https://blog.csdn.net/qq_40994972/article/details/84189430
requests.session()
状态保持
自动处理cookie,下一次请求会带上前一次的cookie。
session实例在请求了一个网站后,对方服务器设置在本地的cookie会保存在session中,下一次再使用session请求对方服务器时,会带上前一次的cookie。
session=requests.session() #实例化session对象
r=session.get(url,headers,...)
r=session.post(url,data,...)