2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > python爬取知乎回答_Python爬虫教程:爬取知乎网!

python爬取知乎回答_Python爬虫教程:爬取知乎网!

时间:2020-12-28 05:26:25

相关推荐

python爬取知乎回答_Python爬虫教程:爬取知乎网!

知乎已经成为了爬虫的训练场,本文利用Python中的requests库,模拟登陆知乎,获取cookie,保存到本地,然后这个cookie作为登陆的凭证,登陆知乎的主页面,爬取知乎主页面上的问题和对应问题回答的摘要。

关于知乎验证码登陆的问题,用到了Python上一个重要的图片处理库PIL,如果不行,就把图片存到本地,手动输入。

爬取知乎的关键的部分:模拟登陆

通过对知乎登陆是的抓包,可以发现登陆知乎,需要post三个参数,一个是账号,一个是密码,一个是xrsf。

这个xrsf隐藏在表单里面,每次登陆的时候,应该是服务器随机产生一个字符串。所有,要模拟登陆的时候,必须要拿到xrsf。

用chrome (或者火狐 httpfox 抓包分析)的结果:

所以,必须要拿到xsrf的数值,注意这是一个动态变化的参数,每次都不一样。

注意findall和find_all函数的区别。

拿到xsrf,下面就可以模拟登陆了。

使用requests库的session对象,建立一个会话的好处是,可以把同一个用户的不同请求联系起来,直到会话结束都会自动处理cookies。

注意:cookies 是当前目录的一个文件,这个文件保存了知乎的cookie,如果是第一个登陆,那么当然是没有这个文件的,不能通过cookie文件来登陆。必须要输入密码。

def login(secret, account):

# 通过输入的用户名判断是否是手机号

if re.match(r"^1\d{10}$", account):

print("手机号登录 \n")

post_url = /login/phone_num

postdata = {

\_xsrf: get_xsrf(),

password: secret,

emember_me: rue,

phone_num: account,

}

else:

if "@" in account:

print("邮箱登录 \n")

else:

print("你的账号输入有问题,请重新登录")

return 0

post_url = /login/email

postdata = {

\_xsrf: get_xsrf(),

password: secret,

emember_me: rue,

email: account,

}

try:

# 不需要验证码直接登录成功

login_page = session.post(post_url, data=postdata

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。