Python网络爬虫之用户名密码及验证码登陆
Posted 日常分享Python
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python网络爬虫之用户名密码及验证码登陆相关的知识,希望对你有一定的参考价值。
对于登陆情况的处理
1.1 使用表单登陆
这种情况属于post请求,即先向服务器发送表单数据,服务器再将返回的cookie存入本地。
data = {'data1':'XXXXX', 'data2':'XXXXX'}
Requests:data为dict,json
import requests
response = requests.post(url=url, data=data)
Urllib2:data为string
import urllib, urllib2
data = urllib.urlencode(data)
req = urllib2.Request(url=url, data=data)
response = urllib2.urlopen(req)
1.2 使用cookie登陆
使用cookie登陆,服务器会认为你是一个已登陆的用户,所以就会返回给你一个已登陆的内容。因此,需要验证码的情况可以使用带验证码登陆的cookie解决。
import requests
requests_session = requests.session()
response = requests_session.post(url=url_login, data=data)
若存在验证码,此时采用response = requests_session.post(url=url_login, data=data)是不行的,做法应该如下:
response_captcha = requests_session.get(url=url_login, cookies=cookies)
response1 = requests.get(url_login) # 未登陆
response2 = requests_session.get(url_login) # 已登陆,因为之前拿到了Response Cookie!
response3 = requests_session.get(url_results) # 已登陆,因为之前拿到了Response Cookie!
网络爬虫之用户名密码及验证码登陆:爬取知乎网站一些说明:
-
使用requests包来爬取。首先尝试用用户名密码自动登陆,如果失败,则需要采用cookie登陆。
-
配置文件config.ini,其中包括用户名密码信息,如果有验证码情况,需要手动登陆一次网站获取cookie信息。
-
判断登陆成功与否,看生成的html文件中有没有用户信息。
代码分享:
# -*- coding: utf-8 -*-
'''
网络爬虫之用户名密码及验证码登陆:爬取知乎网站
'''
import requests
import ConfigParser
def create_session():
cf = ConfigParser.ConfigParser()
cf.read('config.ini')
cookies = cf.items('cookies')
cookies = dict(cookies)
from pprint import pprint
pprint(cookies)
email = cf.get('info', 'email')
password = cf.get('info', 'password')
session = requests.session()
login_data = {'email': email, 'password': password}
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36',
'Host': 'www.zhihu.com',
'Referer': 'http://www.zhihu.com/'
}
r = session.post('http://www.zhihu.com/login/email', data=login_data, headers=header)
if r.json()['r'] == 1:
print 'Login Failed, reason is:',
for m in r.json()['data']:
print r.json()['data'][m]
print 'So we use cookies to login in...'
has_cookies = False
for key in cookies:
if key != '__name__' and cookies[key] != '':
has_cookies = True
break
if has_cookies is False:
raise ValueError('请填写config.ini文件中的cookies项.')
else:
# r = requests.get('http://www.zhihu.com/login/email', cookies=cookies) # 实现验证码登陆
r = session.get('http://www.zhihu.com/login/email', cookies=cookies) # 实现验证码登陆
with open('login.html', 'w') as fp:
fp.write(r.content)
return session, cookies
if __name__ == '__main__':
requests_session, requests_cookies = create_session()
# url = 'http://www.zhihu.com/login/email'
url = 'http://www.zhihu.com/topic/19552832'
# content = requests_session.get(url).content # 未登陆
# content = requests.get(url, cookies=requests_cookies).content # 已登陆
content = requests_session.get(url, cookies=requests_cookies).content # 已登陆
with open('url.html', 'w') as fp:
fp.write(content)
①2000多本Python电子书有
②Python开发环境安装教程有
③Python400集+自学视频有
④软件开发常用词汇有
⑤Python学习路线图有
⑥项目游戏源码案例分享有
如果你用得到的话可以直接拿走,在我的QQ技术交流群里(技术交流和资源共享,广告勿
入,不要让我搞废你的群)可以自助拿走,群号是924403856。
❀微信扫一扫关注公众号加入学习交流技术解答小天地❀
以上是关于Python网络爬虫之用户名密码及验证码登陆的主要内容,如果未能解决你的问题,请参考以下文章