博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python模拟浏览器登录
阅读量:4054 次
发布时间:2019-05-25

本文共 2908 字,大约阅读时间需要 9 分钟。

转自:http://blog.csdn.net/shomy_liu/article/details/37658701

上一篇大致介绍了python爬取网页的两种简单的情况;接着又学习了一下登录的情况;并实现了登录人人网

先大致总结一下登录的几个步骤

1,添加Cookie配置

一般需要账号密码登陆的,直接网址或者模仿浏览器操作是无法进入的,一般的解决方法是用python的一个模块是cookielib,用来记住登录成功之后保存到本地的cookie;

具体代码看人人登录吧

2,添加登录需要提交的表单信息

一般postdata的信息为登陆的用户名,密码什么的,还有许多其他的信息,其余的数据是否必要,需要测试一下; 查看这个就可以用httpfox 或者审查元素的nextwork里面,当你点击登录的时候,在审查元素的network里面可以看到post 、get的数据信息;这里就可以按照我们需要的来拿;

下面是模仿登录人人网的代码;代码注释挺细的。以便以后回忆~~ 由于对正则不太会,就没有做爬取(正则后面在学QAQ)

[python] 
  1. # -*- coding: cp936 -*-  
  2. #renren login  
  3. #Filename: renren.py  
  4.   
  5. import urllib2,urllib,cookielib  
  6.   
  7. #设置cookie  
  8. cookiejar= cookielib.CookieJar()  
  9. cookie=urllib2.HTTPCookieProcessor(cookiejar)  
  10. opener= urllib2.build_opener(cookie,urllib2.HTTPHandler())  
  11. urllib2.install_opener(opener)  
  12.   
  13. #账号信息  
  14. email=raw_input('输入邮箱')  
  15. password=raw_input('输入密码')  
  16. domain='renren.com'#域名  
  17. url='http://www.renren.com/PLogin.do'#可以通过审查元素得到  
  18.   
  19.   
  20. #httpfox抓取数据包信息, 其中headers和domain 可有可无 postdata里面很多元素;最主要的用户名密码  
  21. #d对付反爬虫  
  22. headers={  
  23.    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0'  
  24.     }  
  25. data={  
  26.     'email' : email,  
  27.     'password' : password,  
  28.     'domain': domain  
  29.     }  
  30. #编码data  
  31. postdata = urllib.urlencode(data)  
  32.   
  33.   
  34. #发起请求  
  35. req=urllib2.Request(url,postdata,headers)  
  36. #获取源码  
  37. print urllib2.urlopen(req).read()  
  38.                       

转自:http://zipperary.com/2013/08/16/python-login/

我的博客中曾经贴过几个爬虫程序的,用来批量下载图片非常方便。这样的爬虫实现起来比较简单。而有些网站需要用户登录之后才可以下载文件,之前的方法就办不到了。今天就说说用Python模拟浏览器的登录过程,为之后的登录下载做好准备。

登录的情况,需要额外用到的一个模块是cookielib,用来记住登录成功之后保存到本地的cookie,方便在网站的各个页面之间穿越。

先上代码示例:

12345678910111213141516171819202122232425262728
#encoding=utf8import urllibimport urllib2import cookielib###登录页的urllgurl = 'http://mlook.mobi/member/login'###用cookielib模块创建一个对象,再用urlllib2模块创建一个cookie的handlercookie = cookielib.CookieJar()cookie_handler = urllib2.HTTPCookieProcessor(cookie)###有些网站反爬虫,这里用headers把程序伪装成浏览器hds = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36' }  ###登录需要提交的表单pstdata = {
'formhash':'', #填入formhash 'person[login]':'', #填入网站的用户名 'person[password]':'', #填入网站密码 }dt = urllib.urlencode(pstdata) #表单数据编码成url识别的格式req = urllib2.Request(url = lgurl,data = dt,headers = hds) #伪装成浏览器,访问该页面,并POST表单数据,这里并没有实际访问,只是创建了一个有该功能的对象opener = urllib2.build_opener(cookie_handler) #绑定handler,创建一个自定义的openerresponse = opener.open(req)#请求网页,返回句柄page = response.read()#读取并返回网页内容print page #打印到终端显示

说明一下:

  1. 我这里就不提供用户名密码了。关于需要提交的表单数据,chrome用户可以F12 -> Network -> 填好账号密码并登录 -> 在Network找到POST...,请看截图。

    点击「login」进入下图界面。


    「From Data」里面数据比较多,通常需要用户名、密码,其余的数据是否必要,需要测试一下。对于这个网站,还需要「formhash」。

  2. Linux下无编码问题,win下如果出现编码问题应该是终端对编码的支持不到位。

  3. 登录成功之后,我们创建的cookie_handler会自动管理cookie,程序的后面如果需要访问其他页面,用opener打开其url即可。

  4. 「User-Agent」同样可以通过F12查看到。

  5. 更详细更nice的说明请参考

  6. 这篇博客重点不在介绍原理,重点是记录下这个简单的代码块,其他需要登录的爬虫仿写就可以了。

这个程序的目的是批量下载mlook的电子书。现在遇到一个问题:

下载时网站会验证cookie,不通过就没法下载。但是,我们用python下载文件一般是通过urllib.urlretrieve()。问题来了,这种方式没办法跟opener绑定到一起。

一种可能的解决办法是用opener打开下载链接,用open和write方式保存。但这个方法消耗比较大。

你可能感兴趣的文章
IntelliJ IDEA 12 + git
查看>>
git-ssh 配置和使用
查看>>
(EM算法)The EM Algorithm
查看>>
Spring配置bean时id和name的相关讨论
查看>>
Spring的depends-on属性Bean依赖
查看>>
匿名内部类实现接口,继承类
查看>>
org.apache.ibatis.builder.IncompleteElementException: Could not find parameter map ***
查看>>
java程序向mysql数据表插入数据时中文乱码问题
查看>>
项目导入时报错:The import javax.servlet.http.HttpServletRequest cannot be resolved
查看>>
SQL 左外连接,右外连接,全连接,内连接
查看>>
数据库并发操作与数据的不一致性
查看>>
sql 游标的定义与使用
查看>>
存储过程详解
查看>>
单例模式详解
查看>>
单例模式
查看>>
hashmap实现原理浅析
查看>>
HashMap的工作原理
查看>>
HashMap实现原理分析
查看>>
二分查找
查看>>
用java编写的单源最短路径算法,Dijkstra算法
查看>>