我的 requests.Session for python 爬虫有什么问题?
What's wrong with my requests.Session for python crawler?
我正在为 www.researchgate.net 编写爬虫程序,但似乎我将永远停留在登录页面。
这是我的代码:
import requests
from bs4 import BeautifulSoup
session = requests.Session()
params = {'login': 'my_email', 'password': 'my_password'}
session.post("https://www.researchgate.net/application.Login.html", data = params)
s = session.get("https://www.researchgate.net/search.Search.html?type=researcher&query=zhang")
print BeautifulSoup(s.text).title
有人能发现我的代码有什么问题吗?为什么s每次都跳转到登录页面?
可能需要提供登录表单中的隐藏字段(我无法测试 - 我在那里没有登录)。
一个是request_token
,设置为一个长的base64编码字符串。其他 invalidPasswordCount
和 loginCookie
可能也是必需的。
此外,还有一个会话 cookie,您可能需要将其与登录凭据一起发送。
要完成这项工作,需要初始 GET
才能获得 request_token
,您需要以某种方式提取它 - 例如BeautifulSoup。如果您使用 requests
会话,则 cookie 将显示在以下 POST
中,因此您无需担心。
import requests
from bs4 import BeautifulSoup
session = requests.Session()
# initial GET to retrieve token and set cookies
r = session.get('https://www.researchgate.net/application.Login.html')
soup = r.BeautifulSoup(r.text)
request_token = soup.find('input', attrs={'name':'request_token'})['value']
params = {'login': 'my_email', 'password': 'my_password', 'request_token': request_token, 'invalidPasswordCount': 0, 'loginCookie': 'yes'}
session.post("https://www.researchgate.net/application.Login.html", data=params)
s = session.get("https://www.researchgate.net/search.Search.html?type=researcher&query=zhang")
print BeautifulSoup(s.text).title
感谢mhawke,我按照他的建议修改了原来的代码,终于登录成功了。
这是我的新代码:
import requests
from bs4 import BeautifulSoup
session = requests.Session()
loginpage = session.get("https://www.researchgate.net/application.Login.html")
request_token = BeautifulSoup(loginpage.text).form.find("input",{"name":"request_token"}).attrs["value"]
print request_token
params = {"request_token":request_token,
"invalidPasswordCount":"0",
'login': 'my_email',
'password': 'my_password',
"setLoginCookie":"yes"
}
session.post("https://www.researchgate.net/application.Login.html", data = params)
#print s.cookies.get_dict()
s = session.get("https://www.researchgate.net/search.Search.html?type=researcher&query=zhang")
print BeautifulSoup(s.text).title
我正在为 www.researchgate.net 编写爬虫程序,但似乎我将永远停留在登录页面。
这是我的代码:
import requests
from bs4 import BeautifulSoup
session = requests.Session()
params = {'login': 'my_email', 'password': 'my_password'}
session.post("https://www.researchgate.net/application.Login.html", data = params)
s = session.get("https://www.researchgate.net/search.Search.html?type=researcher&query=zhang")
print BeautifulSoup(s.text).title
有人能发现我的代码有什么问题吗?为什么s每次都跳转到登录页面?
可能需要提供登录表单中的隐藏字段(我无法测试 - 我在那里没有登录)。
一个是request_token
,设置为一个长的base64编码字符串。其他 invalidPasswordCount
和 loginCookie
可能也是必需的。
此外,还有一个会话 cookie,您可能需要将其与登录凭据一起发送。
要完成这项工作,需要初始 GET
才能获得 request_token
,您需要以某种方式提取它 - 例如BeautifulSoup。如果您使用 requests
会话,则 cookie 将显示在以下 POST
中,因此您无需担心。
import requests
from bs4 import BeautifulSoup
session = requests.Session()
# initial GET to retrieve token and set cookies
r = session.get('https://www.researchgate.net/application.Login.html')
soup = r.BeautifulSoup(r.text)
request_token = soup.find('input', attrs={'name':'request_token'})['value']
params = {'login': 'my_email', 'password': 'my_password', 'request_token': request_token, 'invalidPasswordCount': 0, 'loginCookie': 'yes'}
session.post("https://www.researchgate.net/application.Login.html", data=params)
s = session.get("https://www.researchgate.net/search.Search.html?type=researcher&query=zhang")
print BeautifulSoup(s.text).title
感谢mhawke,我按照他的建议修改了原来的代码,终于登录成功了。
这是我的新代码:
import requests
from bs4 import BeautifulSoup
session = requests.Session()
loginpage = session.get("https://www.researchgate.net/application.Login.html")
request_token = BeautifulSoup(loginpage.text).form.find("input",{"name":"request_token"}).attrs["value"]
print request_token
params = {"request_token":request_token,
"invalidPasswordCount":"0",
'login': 'my_email',
'password': 'my_password',
"setLoginCookie":"yes"
}
session.post("https://www.researchgate.net/application.Login.html", data = params)
#print s.cookies.get_dict()
s = session.get("https://www.researchgate.net/search.Search.html?type=researcher&query=zhang")
print BeautifulSoup(s.text).title