我的目标是在github中创建一个经过身份验证的会话,以便我可以使用高级搜索(将功能限制为未经过身份验证的用户)。目前,我正在收到来自"什么?的帖子请求的网页回复。您的浏览器出了意外的事情如果问题仍然存在,请与我们联系。"
以下是我用来尝试完成任务的代码。
import requests
from lxml import html
s = requests.Session()
payload = (username, password)
_ = s.get('https://www.github.com/login')
p = s.post('https://www.github.com/login', auth=payload)
url = "https://github.com/search?l=&p=0&q=language%3APython+extension%3A.py+sklearn&ref=advsearch&type=Code"
r = s.get(url, auth=payload)
text = r.text
tree = html.fromstring(text)
我尝试的是什么?我宁愿不使用github v3 api,因为它是速率有限的,我想做更多我自己的高级搜索。谢谢。
答案 0 :(得分:1)
正如评论中所提到的,github使用发布数据进行身份验证,因此您应该在data
参数中获得您的信用。
您必须提交的元素包括'login'
,'password'
和'authenticity_token'
。 'authenticity_token'
的值是动态的,但您可以从'/login'
中删除它
最后将data
提交给/session
,您应该有一个经过身份验证的会话。
s = requests.Session()
r = s.get('https://www.github.com/login')
tree = html.fromstring(r.content)
data = {i.get('name'):i.get('value') for i in tree.cssselect('input')}
data['login'] = username
data['password'] = password
r = s.post('https://github.com/session', data=data)