最近开始整理自己学过的东西 我对爬虫比较有兴趣 ,最近和知乎叫上劲了 打算爬知乎 今年经过一上午 的努力终于登陆上了 这算是花式爬知乎的第一篇打算以后就围绕知乎进行爬虫的学习和整理以前学过的知识。
爬取知乎 首先要对知乎进行登陆(没说必须登陆,也可以不登录的),然后下面就是我爬的一些过程
1 第一步去知乎首页
到这页面以后打开F12进入谷歌浏览器的开发者页面
在这个页面在进行一系列 的操作,模拟知乎登陆需要,其中最重要的是_xsrf这个可以在网页的源代码里获得
_xsrf = re.findall(‘name=”_xsrf” value=”(.*?)”/’,html)通过简单的正则就可以获得 在有了_xsrf (这个_xsrf我发现是固定的 我不知道别人的是什么样子的 我
的是固定的)以后 我们需要找到他的登录的url,这个时候你在network里面勾上,然后去登陆框里打上一个错误的账号密码 ,你会发在
phone_num(email)这里面找到登陆的url
这样就可以构造表单进行提交了
这样 就完事具备了 下面我就把代码发上去
import time,re
from http import cookiejar
import requests
headers = {
“Host”: “www.zhihu.com”,
“Referer”: “https://www.zhihu.com/“,
‘User-Agent’: ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87’
}
s = requests.Session()
s.cookies = cookiejar.LWPCookieJar(filename=’cookies.text’)
try:
print(s.cookies )
s.cookies.load(ienore_discard =True )
except :
print(“还没有cookies信息”)
def get_xsrf():
response = s.get(“https://www.zhihu.com“, headers=headers, verify=False)
html = response.text
_xsrf = re.findall(‘name=”_xsrf” value=”(.*?)”/’, html)
return _xsrf
def get_jpg():
t = str(int(time.time()*1000))
jpg_url = ‘https://www.zhihu.com/captcha.gif?r=’ + t + “&type=login”
r = s.get(jpg_url , headers=headers)
with open(‘jpg.jpg’,’wb’) as f:
f.write(r.content)
jpg = input(‘验证码:’)
return jpg
def login(phone_num,password):
login_url = ‘https://www.zhihu.com/login/phone_num’
data = data = {
‘email’: phoen_num ,
‘password’: password,
‘_xsrf’: get_xsrf(),
“captcha”: get_jpg(),
‘remember_me’: ‘true’
}
print(s.cookies )
response = s.post(login_url,data=data,headers=headers )
login_code = response.json()
print(login_code[‘msg’])
print(s.cookies )
r = s.get(“https://www.zhihu.com/settings/profile“, headers=headers)
print(r.status_code )
print(r.text)
with open(‘zhiuh.html’,’wb’) as f:
f.write(r.content )
if name ==”main“:
phoen_num = “*”
password = “**”
login( phoen_num, password)
这样就可以登陆成功了