Python爬虫——模拟登陆爬取知乎页面
2017-10-28 11:02
381 查看
一. 具体操作步骤
知乎登陆界面:https://www.zhihu.com/#signin
打开知乎登陆页面
1)先输入一个错误登陆,然后打开Fiddler抓取提交的包
可以得到:
由抓取的包里面的信息可以知道,需要提交的表单信息有四个
_xsrf
password
captcha_type
email
2)在执行一遍1)的操作
可以得出:
_xsrf : 由系统生成刷新一次改变一次
password : 输入密码
email:输入的用户名
captcha_type : 验证码值
3)获取验证码
由于验证码是一张图片,所以我们对于验证码的获取可以采用将图片下载下来,在进行手动输入验证码获得验证码的值
a.首先获得验证码的图片url地址
https://www.zhihu.com/captcha.gif?r=1509160957148&type=login
通过r所传递的值我们可以知道这是时间戳
b.通过网址就可以下载验证码图片
c.通过本地下载的验证码图片手动输入验证码的值
4)使用post请求提交表单数据获得返回cookie就可以访问需要登录后才可以访问的任意界面了
二. 下面是具体实现代码
# _*_ coding:utf-8 _*_
#导入requests库
import requests
#导入BeautifulSoup模块
from bs4 import BeautifulSoup
import time
#_xsrf=e218097f4550911091b3cc14920b2f7d&password=asdasdasdas&captcha=%7B%22img_size%22%3A%5B200%2C44%5D%2C%22input_points%22%3A%5B%5B28.2969%2C27%5D%2C%5B69.2969%2C24%5D%5D%7D&captcha_type=cn&email=sdfsada
#保存验证码图片并返回验证码的值
def writeImage(res):
print "保存验证码..."
with open("page/captcha.jpg","wb") as f:
f.write(res)
print "保存完毕..."
#输入保存完后图片内验证码的值
test = raw_input("验证码为:")
return test
def loginPage():
# 登录网址
url = "https://www.zhihu.com/#signin"
# 请求报头
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
#创建一个session用于存取cookies值
session = requests.session()
html = session.get(url,headers=headers).text
#创建lxml
bs = BeautifulSoup(html,"lxml")
#获取_xsrf
_xsrf = bs.find("input",attrs={"name":"_xsrf"}).get("value")
#获取验证码
captcha_url = "https://www.zhihu.com/captcha.gif?r=%d&type=login" % (time.time() * 1000)
#发送请求获取文件流
captcha_res = session.get(captcha_url,headers=headers).content
#保存并获得验证码值
test = writeImage(captcha_res)
#data表单提交数据
data = {
"_xsrf": _xsrf,
"password":"密码",
"email":"账号",
"captcha_type": test
}
#使用post提交登录信息,保存返回的cookie值
session.post(url,data=data,headers=headers)
#访问需要登录后才能访问的网页
response = session.get("https://www.zhihu.com/people/er-kou-bu-er/activities",headers=headers)
#打印网页内容
print response.text
#https://www.zhihu.com/#signin
if __name__ == "__main__":
loginPage()
结果:(账号密码处填写需要访问的账号和密码)
知乎登陆界面:https://www.zhihu.com/#signin
打开知乎登陆页面
1)先输入一个错误登陆,然后打开Fiddler抓取提交的包
可以得到:
由抓取的包里面的信息可以知道,需要提交的表单信息有四个
_xsrf
password
captcha_type
2)在执行一遍1)的操作
可以得出:
_xsrf : 由系统生成刷新一次改变一次
password : 输入密码
email:输入的用户名
captcha_type : 验证码值
3)获取验证码
由于验证码是一张图片,所以我们对于验证码的获取可以采用将图片下载下来,在进行手动输入验证码获得验证码的值
a.首先获得验证码的图片url地址
https://www.zhihu.com/captcha.gif?r=1509160957148&type=login
通过r所传递的值我们可以知道这是时间戳
b.通过网址就可以下载验证码图片
c.通过本地下载的验证码图片手动输入验证码的值
4)使用post请求提交表单数据获得返回cookie就可以访问需要登录后才可以访问的任意界面了
二. 下面是具体实现代码
# _*_ coding:utf-8 _*_
#导入requests库
import requests
#导入BeautifulSoup模块
from bs4 import BeautifulSoup
import time
#_xsrf=e218097f4550911091b3cc14920b2f7d&password=asdasdasdas&captcha=%7B%22img_size%22%3A%5B200%2C44%5D%2C%22input_points%22%3A%5B%5B28.2969%2C27%5D%2C%5B69.2969%2C24%5D%5D%7D&captcha_type=cn&email=sdfsada
#保存验证码图片并返回验证码的值
def writeImage(res):
print "保存验证码..."
with open("page/captcha.jpg","wb") as f:
f.write(res)
print "保存完毕..."
#输入保存完后图片内验证码的值
test = raw_input("验证码为:")
return test
def loginPage():
# 登录网址
url = "https://www.zhihu.com/#signin"
# 请求报头
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
#创建一个session用于存取cookies值
session = requests.session()
html = session.get(url,headers=headers).text
#创建lxml
bs = BeautifulSoup(html,"lxml")
#获取_xsrf
_xsrf = bs.find("input",attrs={"name":"_xsrf"}).get("value")
#获取验证码
captcha_url = "https://www.zhihu.com/captcha.gif?r=%d&type=login" % (time.time() * 1000)
#发送请求获取文件流
captcha_res = session.get(captcha_url,headers=headers).content
#保存并获得验证码值
test = writeImage(captcha_res)
#data表单提交数据
data = {
"_xsrf": _xsrf,
"password":"密码",
"email":"账号",
"captcha_type": test
}
#使用post提交登录信息,保存返回的cookie值
session.post(url,data=data,headers=headers)
#访问需要登录后才能访问的网页
response = session.get("https://www.zhihu.com/people/er-kou-bu-er/activities",headers=headers)
#打印网页内容
print response.text
#https://www.zhihu.com/#signin
if __name__ == "__main__":
loginPage()
结果:(账号密码处填写需要访问的账号和密码)
相关文章推荐
- Python 爬虫模拟登陆知乎
- Python爬虫模拟登陆知乎
- Python 爬虫模拟登陆知乎
- Python 爬虫模拟登陆知乎
- Python爬虫——模拟登陆爬取csdn页面
- 第三百四十三节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy模拟登陆和知乎倒立文字验证码识别
- Python爬虫模拟登陆知乎
- Python爬虫之模拟登陆知乎
- Python使用Srapy框架爬虫模拟登陆并抓取知乎内容
- Python2 爬虫(四) -- 模拟登陆(人人网和知乎)
- Python使用Srapy框架爬虫模拟登陆并抓取知乎内容
- Python爬虫学习日记:模拟带有cookie的登陆
- 基于Python的HTTPS协议模拟登陆+爬取页面 推荐
- 【Python3.6爬虫学习记录】(九)模拟登陆QQ空间爬取好友所有留言并制作词云
- [python爬虫]模拟登陆扇贝单词
- Python简单知乎爬虫--爬取页面的图片并下载到本地
- 【Python爬虫基础】抓取知乎页面所有图片
- 用htmlunit模拟浏览器辅助python做页面爬虫
- Python爬虫笔记-豆瓣模拟登陆
- python模拟登陆知乎和CSDN【urllib,re,requests】