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学习路线图有 ⑥项目游戏源码案例分享有
经验分享 程序员 微信小程序 职场和发展