python的requests登录到知乎



 import requests
import re
import time
from subprocess import Popen


headers ={
     'Accept':'*/*' ,
     'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8',
     'X-Requested-With':'XMLHttpRequest',
     'Referer':'http://www.zhihu.com',
     'Accept-Language':'zh-CN',
     'Accept-Encoding':'gzip, deflate',
     'User-Agent':'Mozilla/5.0(Windows NT 6.1;WOW64;Trident/7.0;rv:11.0)like Gecko',
     'Host':'www.zhihu.com'
     }

s =requests.session()
r = s.get('http://www.zhihu.com',headers =headers)
def getXSRF(r):
    cer = re.compile('name=\"_xsrf\" value=\"(.*)\"', flags = 0)
    strlist = cer.findall(r.text)
    return strlist[0]
_xsrf =getXSRF(r)

print(r.request.headers)
print(str(int(time.time()*1000)))
Captcha_URL= 'http://www.zhihu.com/captcha.gif?r='+ str(int(time.time()*1000))
r = s.get(Captcha_URL,headers =headers)

with open('code.gif','wb') as f:
    f.write(r.content)
Popen('code.gif',shell =True)
captcha =input('captcha: ')
login_data ={
    '_xsrf':_xsrf,
    'email':'xxxxx',
    'password': 'xxxx',
    'remember_me':'true',
    'captcha':captcha
    }

s.post('http://www.zhihu.com/#signin',data=login_data,headers=headers)
r =s.get('http://www.zhihu.com')
print(r.text)

输入验证码后还是无法登录

python 网页爬虫 模拟登录

pieces 10 years, 5 months ago

知乎登陆时
如果账号是Email,则提交的URL地址是 http://www.zhihu.com/login/email , email对应的字段名是 email .
如果是手机号, 则提交的URL地址是 http://www.zhihu.com/login/phone_num , 手机号对应的字段名是 phone_num .

而不是 http://www.zhihu.com/#signin


 import requests
import re
import time
from subprocess import Popen


headers ={
     'Accept':'*/*' ,
     'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8',
     'X-Requested-With':'XMLHttpRequest',
     'Referer':'http://www.zhihu.com',
     'Accept-Language':'zh-CN',
     'Accept-Encoding':'gzip, deflate',
     'User-Agent':'Mozilla/5.0(Windows NT 6.1;WOW64;Trident/7.0;rv:11.0)like Gecko',
     'Host':'www.zhihu.com'
     }

s =requests.session()
r = s.get('http://www.zhihu.com',headers =headers)
def getXSRF(r):
    cer = re.compile('name=\"_xsrf\" value=\"(.*)\"', flags = 0)
    strlist = cer.findall(r.text)
    return strlist[0]
_xsrf =getXSRF(r)

print(r.request.headers)
print(str(int(time.time()*1000)))
Captcha_URL= 'http://www.zhihu.com/captcha.gif?r='+ str(int(time.time()*1000))
r = s.get(Captcha_URL,headers =headers)

with open('code.gif','wb') as f:
    f.write(r.content)
Popen('code.gif',shell =True)
captcha =input('captcha: ')
login_data = {
    '_xsrf':_xsrf,
    'email':'xxxxx@xxx.com',
    'password': 'xxxxx',
    'remember_me':'true',
    'captcha':captcha
}

r = s.post('http://www.zhihu.com/login/email',data=login_data,headers=headers)
print(r.text)
r = s.get('http://www.zhihu.com/settings/profile')
print(r.text)

PS: 最后请求的地址改为 帐号设置 - 知乎 的URL地址, 该地址在未登陆的情况下, 请求是会跳到登陆页的.
注意修改上面的账号和密码为自己的.

附代码运行截图:

clipboard.png

clipboard.png

clipboard.png

无色D夜空 answered 10 years, 5 months ago

Your Answer