码迷,mamicode.com
首页 > 编程语言 > 详细

Python爬虫之模拟登录豆瓣获取最近看过的电影

时间:2015-08-03 14:42:55      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:python   爬虫   requests   beautifulsoup   模拟登录   

哈哈哈,模拟登录成功啦啦啦啦啦~~~~~

重要的事本来要说三遍,不过还是算了==


先上效果图:

技术分享


众所周知,很多网站都设置了登录之后才能获取查看页面的权利,因此模拟登录成了爬取信息的第一步,这一步成功了,嘿嘿,just do it!


好,废话不多说,直接说重点:

首先,你应该要了解网站登录的流程以及你需要post的信息,以豆瓣为例:

source:movie
redir:https://movie.douban.com/mine?status=collect
form_email:username
form_password:password
captcha-solution:dress
captcha-id:6rP40CbJzNgdJuqOgM3Y6wNs:en
login:登录

这就是你需要提交的信息了,包括用户名和密码,以及验证码和验证码的ID,看到这可能有人会想我怎么知道验证码的ID,各位放心,在页面加载时就已经到客户端这边来了,也就是说你可以直接从浏览器中看到,是不是很炫酷!


第二步,需要了解一些requests这个库了,因为requests直接省去了urllib和urllib2的很多很多很多麻烦,省去了很多冗余的代码,正如官网所言,Requests:HTTP for Human,这是给人用的==

官网地址:Requests


如果你之前有了解过RE和bs4,好了,直接coding吧!

不然的话最好去了解一下bs,也省了不少的麻烦,帮助文档地址:BeautifulSoup


Talking is cheap,show me the code. Now is ShowTime!

# -*- encoding:utf-8 -*-
##############################
__author__ = "Andrewseu"
__date__ = "2015/8/3"
###############################

import requests
from bs4 import BeautifulSoup
import urllib
import re

loginUrl = 'http://accounts.douban.com/login'
formData={
    "redir":"http://movie.douban.com/mine?status=collect",
    "form_email":username,
    "form_password":password,
    "login":u'登录'
}
headers = {"User-Agent":'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36'}
r = requests.post(loginUrl,data=formData,headers=headers)
page = r.text
#print r.url

'''获取验证码图片'''
#利用bs4获取captcha地址
soup = BeautifulSoup(page,"html.parser")
captchaAddr = soup.find('img',id='captcha_image')['src']
#利用正则表达式获取captcha的ID
reCaptchaID = r'<input type="hidden" name="captcha-id" value="(.*?)"/'
captchaID = re.findall(reCaptchaID,page)
#print captchaID
#保存到本地
urllib.urlretrieve(captchaAddr,"captcha.jpg")
captcha = raw_input('please input the captcha:')

formData['captcha-solution'] = captcha
formData['captcha-id'] = captchaID

r = requests.post(loginUrl,data=formData,headers=headers)
page = r.text
if r.url=='http://movie.douban.com/mine?status=collect':
    print 'Login successfully!!!'
    print '我看过的电影','-'*60
    #获取看过的电影
    soup = BeautifulSoup(page,"html.parser")
    result = soup.findAll('li',attrs={"class":"title"})
    #print result
    for item in result:
        print item.find('a').get_text()
else:
    print "failed!"



有任何不懂的地方,欢迎和我交流!


版权声明:本文为博主原创文章,未经博主允许不得转载。

Python爬虫之模拟登录豆瓣获取最近看过的电影

标签:python   爬虫   requests   beautifulsoup   模拟登录   

原文地址:http://blog.csdn.net/andrewseu/article/details/47253791

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!