当前位置: 代码迷 >> 综合 >> XPATH,代理IP,JSON数据格式,session
  详细解决方案

XPATH,代理IP,JSON数据格式,session

热度:101   发布时间:2023-11-27 02:34:30.0

请求头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,...)
  相关解决方案