具有Python请求的多个唯一自治会话

具有Python请求的多个唯一自治会话,python,session,proxy,python-requests,web-crawler,Python,Session,Proxy,Python Requests,Web Crawler,我已经搜索了所有我能找到的请求文档,包括requests futures,但我找不到任何关于这个问题的内容。想知道我是否遗漏了什么,或者这里是否有人可以帮助回答: 是否可以使用requests.Session()创建和管理多个唯一/自治会话? 更详细地说,我想问的是,是否有一种方法可以创建两个会话,我可以单独使用“get”(可能通过多处理)来保留它们自己独特的头、代理和服务器分配的粘性数据集 如果我想让Session_A使用特定的标题和代理点击someimaginarysite.com/page

我已经搜索了所有我能找到的请求文档,包括requests futures,但我找不到任何关于这个问题的内容。想知道我是否遗漏了什么,或者这里是否有人可以帮助回答:

是否可以使用requests.Session()创建和管理多个唯一/自治会话?

更详细地说,我想问的是,是否有一种方法可以创建两个会话,我可以单独使用“get”(可能通过多处理)来保留它们自己独特的头、代理和服务器分配的粘性数据集

如果我想让Session_A使用特定的标题和代理点击someimaginarysite.com/page1.html,然后点击someimaginarysite.com/page2.html,然后点击someimaginarysite.com/page2.html,我可以创建一个Session对象并执行它

但是,如果我希望会话同时从page3.html开始,然后使用与会话完全不同的头/代理点击page4.html,并分配自己的cookie等等,该怎么办?在同一会话中连续抓取多个页面,而不仅仅是一个请求后接一个空白(新)会话的另一个请求

这是否简单地说:

import requests

Session_A = requests.Session()
Session_B = requests.Session()

headers_a = {A headers here}
proxies_a = {A proxies here}

headers_b = {B headers here}
proxies_b = {B proxies here}

response_a = Session_A.get('https://someimaginarysite.com/page1.html', headers=headers_a, proxies=proxies_a)
response_a = Session_A.get('https://someimaginarysite.com/page2.html', headers=headers_a, proxies=proxies_a)

# --- and on a separate thread/processor ---

response_b = Session_B.get('https://someimaginarysite.com/page3.html', headers=headers_b, proxies=proxies_b)
response_b = Session_B.get('https://someimaginarysite.com/page4.html', headers=headers_b, proxies=proxies_b)
或者,上面只创建一个由两个名称访问的会话,这样服务器将看到相同的cookie和会话,并显示两个IP和两组标头。。。这似乎有点奇怪


非常感谢您在这方面的帮助,我已经用尽了我的研究能力。

我认为可能有更好的方法来做到这一点,但是如果没有更多关于分页的信息以及您想要的内容,那么很难准确理解您需要什么。下面将创建两个线程,每个线程中都有顺序调用,并保持相同的头和代理。再一次,也许有更好的方法,但由于信息有限,这有点模糊

导入请求
进口期货
def session_get_same(URL、标题、代理):
lst=[]
将requests.Session()作为s:
对于url中的url:
lst.append(s.get(url,headers=headers,proxies=proxies))
返回lst
def main():
以concurrent.futures.ThreadPoolExecutor()作为执行器:
期货=[
遗嘱执行人提交(
会话得到相同的结果,
网址=[
'https://someimaginarysite.com/page1.html',
'https://someimaginarysite.com/page2.html'
],
headers={'user-agent':'curl/7.61.1'},
代理={'https':'https://10.10.1.11:1080'}
),
遗嘱执行人提交(
会话得到相同的结果,
网址=[
'https://someimaginarysite.com/page3.html',
'https://someimaginarysite.com/page4.html'
],
headers={'user-agent':'curl/7.61.2'},
代理={'https':'https://10.10.1.11:1080'}
),
]
flst=[]
对于并发的未来。期货。完成时(期货):
flst.append(future.result())
返回flst
不确定这是否适合第一个功能,里程数可能会有所不同

def session_获得相同的内容(URL、标题、代理):
lst=[]
将requests.Session()作为s:
s、 headers.update(标题)
s、 代理。更新(代理)
对于url中的url:
lst.append(s.get(url))
返回lst