python登录豆瓣并爬取文章

1.首先使用get请求获取登录时候需要用验证码
2.保存验证码到本地,并且手工输入验证码
3.使用Chrome浏览器打开开发模式,切换到netword下获取请求模拟登录获取请求需要的参数
4.登录成功开始爬取文章
注:改demo只是用来练手并记录一下,所以健壮性没有处理好

import requests
from lxml import etree
from PIL import Image

header = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36'
}

#登录之后获取文章的内容
def get_article_data(input_code,image_id):
    form_data = {
        'source': None,
        'redir': 'https://www.douban.com',
        'form_email': '[email protected]',             #输入你对应的账号
        'form_password': '111111',        #替换密码
        'captcha-solution': input_code,
        'captcha-id': image_id,
        'login': '%E7%99%BB%E5%BD%95'
    }
    s = requests.session()
    #模拟登录操作
    login_data = s.post('https://accounts.douban.com/login', headers=header, data=form_data)
    login_selecotor = etree.HTML(login_data.content)
    article_list = login_selecotor.xpath('//div[@data-uid = "900117594"]')
    for article in range(len((article_list))):
        print login_selecotor.xpath("//div[@class='title']/a/text()")[article].encode('utf-8')

#保存并显示图片
def save_and_show_code(url):
    # 获取图片
    image_content = requests.get(url, headers=header)
    # 保存图片到本地
    with open('code.jpg', 'wb') as fp:
        fp.write(image_content.content)
    # 使用PIL打开图片
    img = Image.open('code.jpg')
    img.show()


def mian():
    # 用get请求登录的页面,获取图片验证码
    login_html = requests.get("https://accounts.douban.com/login", headers=header)
    # print login_html.content
    selector = etree.HTML(login_html.text)
    # 获取图片验证码的网络路径
    image_code = selector.xpath('//*[@id="captcha_image"]/@src')[0]
    # 获取图片对应的id
    image_id = image_code.split('=')[1].split('&')[0]
    #显示验证码
    save_and_show_code(image_code)
    #获取手工填入的验证码
    input_code = None
    input_code = raw_input(u'请输入图形验证码')
    #获取登录后的文章数据
    get_article_data(input_code,image_id)

if __name__ == '__main__':
    mian()

你可能感兴趣的:(python登录豆瓣并爬取文章)