使用Python请求登录网站后无法刮取数据

使用Python请求登录网站后无法刮取数据,python,python-3.x,python-requests,Python,Python 3.x,Python Requests,我正在尝试登录MMA网站,然后一旦登录,网站就会显示不同的用户数据。我尝试了多种登录方法,包括Selenium,这似乎很有效。但是,在我登录并验证一条200OK消息之后,我导航到的下一个URL不会缓存登录,我会收到需要登录才能访问该URL的html消息。有什么建议吗 import requests from lxml import html ulist=list() public=list() count=0 session_requests = requests.session()

我正在尝试登录MMA网站,然后一旦登录,网站就会显示不同的用户数据。我尝试了多种登录方法,包括Selenium,这似乎很有效。但是,在我登录并验证一条200OK消息之后,我导航到的下一个URL不会缓存登录,我会收到需要登录才能访问该URL的html消息。有什么建议吗

import requests
from lxml import html



ulist=list()
public=list()
count=0

session_requests = requests.session()

payload = {
    "identities_password[uid]": "username",
    "identities_password[password]": "password",
    "authenticity_token": "<CSRF_TOKEN>"
}

login_url = "https://www.tapology.com/sign_in"
result = session_requests.get(login_url)

tree = html.fromstring(result.text)
authenticity_token = list(set(tree.xpath("//input[@name='authenticity_token']/@value")))[0]

result = session_requests.post(
    login_url,
    data = payload,
    headers = dict(referer=login_url)
)

print('logged in')

z=result.status_code
print(z)

#Now go to a page to scrape data

session = requests.session()
result = session.get('https://www.tapology.com/profiles/the%20axe%20murderer/predictions/71715-ufc-255')


for link in result:
    link=link.decode()
    print(link)
    file=open('results.txt', 'w')
    file.write(link)
导入请求
从lxml导入html
ulist=list()
public=list()
计数=0
会话\请求=请求。会话()
有效载荷={
“身份\密码[uid]:“用户名”,
“身份\密码[密码]:“密码”,
“真实性令牌”:
}
登录\u url=”https://www.tapology.com/sign_in"
结果=会话\请求.get(登录\ url)
tree=html.fromstring(result.text)
authenticity\u token=list(set(tree.xpath(//input[@name='authenticity\u token']/@value))[0]
结果=session_requests.post(
登录url,
数据=有效载荷,
headers=dict(referer=login\u url)
)
打印('已登录')
z=结果状态\代码
打印(z)
#现在转到一个页面以获取数据
会话=请求。会话()
结果=会话。获取('https://www.tapology.com/profiles/the%20axe%20murderer/predictions/71715-ufc-255')
对于链接输入结果:
link=link.decode()
打印(链接)
文件=打开('results.txt','w')
file.write(链接)

登录后,您将创建一个全新的会话。尝试使用与以前完全相同的会话,看看这是否能使您保持身份验证。如中所示,使用
session\u request
实际获取新页面。如果我再次运行session\u request,它似乎会返回指示我已登录的html。当我为我需要从中获取信息的页面设置新会话请求时,它会说我没有登录。你只是再次覆盖会话!我的意思是,
session\u request
中的会话已经过身份验证,请使用该身份验证的会话来获取另一个页面。在上述代码中,
print('logged in')
后面的行,执行新的
result=session\u requests.get()
。您不必为正在获取的每个页面创建一个新的
requests.session()
实例。您的登录请求不会对您进行身份验证,因为您没有将
authenticity\u token
设置为
payload
。您是在登录后创建一个全新的会话。尝试使用与以前完全相同的会话,看看这是否能使您保持身份验证。如中所示,使用
session\u request
实际获取新页面。如果我再次运行session\u request,它似乎会返回指示我已登录的html。当我为我需要从中获取信息的页面设置新会话请求时,它会说我没有登录。你只是再次覆盖会话!我的意思是,
session\u request
中的会话已经过身份验证,请使用该身份验证的会话来获取另一个页面。在上述代码中,
print('logged in')
后面的行,执行新的
result=session\u requests.get()
。您不必为正在获取的每个页面创建一个新的
requests.session()
实例。您的登录请求不会对您进行身份验证,因为您没有将
authenticity\u token
设置到
有效负载中。