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)
 
  1. ①2000多本Python电子书有

  2. ②Python开发环境安装教程有

  3. ③Python400集+自学视频有

  4. ④软件开发常用词汇有

  5. ⑤Python学习路线图有

  6. ⑥项目游戏源码案例分享有

  7. 如果你用得到的话可以直接拿走,在我的QQ技术交流群里(技术交流和资源共享,广告勿入,不要让我搞废你的群)可以自助拿走,群号是924403856。

❀微信扫一扫关注公众号加入学习交流技术解答小天地❀

以上是关于Python网络爬虫之用户名密码及验证码登陆的主要内容,如果未能解决你的问题,请参考以下文章

python网络爬虫之如何识别验证码

[转载]python实现带验证码网站的自动登陆

python爬虫之获取验证码登陆

Python爬虫学习:浙大软院网络登陆保持

Python爬虫:Bilibili模拟登陆(滑动验证码)项目

网络爬虫之12306-验证码验证