因为图论作业,所以要写一个爬虫,就开始学python。接触python开始,就觉得这个语言非常舒服,不需要定义变量,不需要分号,非常简洁。

下面就聊聊,我写爬虫的经历。上网搜了一下爬虫的代码,发现简单爬虫还是非常好写的,主要用到python中的urllib,urllib2这些库,对于网页进行操作,同时会用到正则表达式获取想要的内容。

有一个问题是,我们有时候需要爬取一些登录之后的信息,如果没有登录,获得的信息非常少,没法满足我们的需求。

下面以新浪微博为例。

先贴代码,注释很详细,等大作业写完有时间了,再详细说如何一步步做。简单说就是需要处理:postdata,cookie,prelogin,加密算法。

#coding=utf8

# import 这边需要注意的是只有一个rsa这个模块是需要install的,其他的都是内置

import re , urllib , urllib2, cookielib , base64 , binascii , rsa

# 让接下来的所有get和post请求都带上已经获取的cookie

cj = cookielib.LWPCookieJar()

cookie_support = urllib2.HTTPCookieProcessor(cj)

opener = urllib2.build_opener(cookie_support , urllib2.HTTPHandler)

urllib2.install_opener(opener)

# 封装一个用于get的函数,新浪微博这边get出来的内容编码都是-8

def getData(url) :

request = urllib2.Request(url)

response = urllib2.urlopen(request)

text = response.read().decode('utf-8')

return text

# 封装一个用于post的函数,验证密码和用户名都是post的,所以这个postData在本demo中专门用于验证用户名和密码

def postData(url , data) :

# headers需要我们自己来模拟

headers = {'User-Agent' : 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)'}

# 这里的urlencode用于把一个请求对象用'&'来接来字符串化,接着就是编码成utf-8

data = urllib.urlencode(data).encode('utf-8')

request = urllib2.Request(url , data , headers)

response = urllib2.urlopen(request)

text = response.read().decode('gbk')

return text

def login_weibo(nick , pwd) :

#==========================获取servertime , pcid , pubkey , rsakv===========================

# 预登陆请求,获取到若干参数

prelogin_url = 'http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=%s&rsakt=mod&checkpin=1&client=ssologin.js(v1.4.15)&_=1400822309846' % nick

preLogin = getData(prelogin_url)

# 下面获取的四个值都是接下来要使用的

servertime = re.findall('"servertime":(.*?),' , preLogin)[0]

pubkey = re.findall('"pubkey":"(.*?)",' , preLogin)[0]

rsakv = re.findall('"rsakv":"(.*?)",' , preLogin)[0]

nonce = re.findall('"nonce":"(.*?)",' , preLogin)[0]

#===============对用户名和密码加密================

# 各种加密,最后形成了加密后的su和sp

su = base64.encodestring(urllib.quote(nick))

rsaPublickey = int(pubkey , 16)

key = rsa.PublicKey(rsaPublickey , 65537)

message = str(servertime) + '\t' + str(nonce) + '\n' + str(pwd)

sp = binascii.b2a_hex(rsa.encrypt(message , key))

#=======================登录=======================

#param就是激动人心的登陆post参数,这个参数用到了若干个上面第一步获取到的数据

param = {'entry' : 'weibo' , 'gateway' : 1 , 'from' : '' , 'savestate' : 7 , 'useticket' : 1 , 'pagerefer' : 'http://login.sina.com.cn/sso/logout.php?entry=miniblog&r=http%3A%2F%2Fweibo.com%2Flogout.php%3Fbackurl%3D' , 'vsnf' : 1 , 'su' : su , 'service' : 'miniblog' , 'servertime' : servertime , 'nonce' : nonce , 'pwencode' : 'rsa2' , 'rsakv' : rsakv , 'sp' : sp , 'sr' : '1680*1050' ,

'encoding' : 'UTF-8' , 'prelt' : 961 , 'url' : 'http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack'}

# 这里就是使用postData的唯一一处,也很简单

s = postData('http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.15)' , param)

# 这个urll是登陆之后新浪返回的一段脚本中定义的一个进一步登陆的url,之前还都是获取参数和验证之类的,这一步才是真正的登陆,所以还需要再一次把这个urll获取到并用get登陆即可

urll = re.findall("location.replace\(\'(.*?)\'\);" , s)[0]

getData(urll)

# 登录微博

login_weibo('你的账号名','你的密码')

#======================获取粉丝====================

# 可以尝试着获取自己的微博主页

text = getData('http://weibo.com/5548896862/follow?from=page_100505&wvr=6&mod=headfollow#place').encode('utf-8')

fp = open('yeah.txt' , 'w')

fp.write(text)

fp.close()

最后是我的的微博主页,跪求互粉~~

http://weibo.com/u/5778958604

此博客中的内容均为原创或来自网络,不用做任何商业用途。欢迎与我交流学习,我的邮箱是lsa0924@163.com

pythonurllib登录微博账号_简单爬虫实现登录新浪微博(python2.7)相关推荐

  1. php 单点登录实现代码,PHP简单实现单点登录功能示例

    1.准备两个虚拟域名 127.0.0.1  www.openpoor.com 127.0.0.1  www.myspace.com 2.在openpoor的根目录下创建以下文件 index.PHP 1 ...

  2. python爬虫登录微博_为爬虫获取登录cookies: 使用Charles和requests模拟微博登录

    上一节,我们讲了如何配置Charles代理,这一节我们通过模拟微博登录这个例子来看看如何使用Charles分析网站加载流程,顺便把微博模拟登录的Python代码也给实现了. 1. 用Charles记录 ...

  3. pythonurllib登录微博账号_Python使用cookielib和urllib2模拟登录新浪微博并抓取数据...

    这个方法抓下来的网页,得不到相册图片,新浪要js动态生成图片,解决方法能够是:1. 本地用webkit跑抓下来的js:2.抓移动版微博的静态相册. 但都暂时未实现,欢迎回帖好方法,如下是转文. --- ...

  4. 非三星手机无法登录三星账号_如何解决所有三星手机的烦恼

    非三星手机无法登录三星账号 Samsung is the biggest manufacturer of Android phones in the world, but that doesn't m ...

  5. python爬虫ip限制_简单爬虫,突破IP访问限制和复杂验证码,小总结

    简单爬虫,突破复杂验证码和IP访问限制 好吧,看题目就知道我是要写一个爬虫,这个爬虫的目标网站有一些反爬取意识,所以就有了本文了. 我先说说场景吧: 由于工作需要,平时有一大堆数据需要在网上查询,并归 ...

  6. 同一个浏览器登录不同账号_亚马逊又搞事情了!再来一波被关联封杀的账号,这些问题你不得不知道!...

    又一轮亚马逊账号关联封杀!这些问题你必须注意! 本期目录 1.亚马逊账号关联多发 2.为什么会有账号关联 3.亚马逊判断账号关联的依据 4.导致账号关联的相关要素 5.收到小红旗该怎么办 6.防关联的 ...

  7. zblogphp登录和注册_基于PHP的登录和注册的功能的实现

    1.新建三个html文件,两个php文件和若干个CSS文件和若干个JS文件 2.登录的html页面显示效果图 3.注册的页面的显示效果图 4.登录页面的form表单代码 用户名: 密码: 登录 没有账 ...

  8. laravel身份证验证_简单的Laravel登录身份验证

    laravel身份证验证 This article has been upgraded to work with Laravel 4.1.26 本文已升级为可与Laravel 4.1.26一起使用 T ...

  9. 同一个浏览器登录不同账号_亚马逊账号安全问题,小白一直关心的防关联操作(真正解决)...

    2019-11-21更新,最近已经有更成熟的技术出来了,大家可以用超级浏览器,软件名和链接我放在文末,这个超级浏览器就是一个保护伞的意思,你要登后台的时候,就用先登陆它,就会跟本地环境隔离. 找了半天 ...

最新文章

  1. 解决load cycle count的一个偏方,告别硬盘卡卡响
  2. 粒子网格算法 pm_使粒子网格与Blynk一起使用的2种最佳方法
  3. 使用WebService与Oracle EBS进行集成(上)
  4. vscode 支持 markdown 流程图
  5. java执行python返回null_[转]java调用python脚本以及通过Process.waitFor()直接调用python模块返回错误代码1的一种解决办法...
  6. 特斯拉:部分帖文包含不实信息 将定期分享真实情况
  7. 依赖反转原理,IoC容器和依赖注入:第2部分
  8. win7驱动程序未经签名可以使用吗_如何解决Windows7安装驱动程序强制要求签名
  9. 第十五章:进程间通信
  10. NYOJ 588 Money
  11. 安卓 实现一个简单的计算器
  12. 第10课:JSP指令 Page指令 (JSP教程 JSP入门实战教程 黄菊华Java网站开发系列教程)
  13. 红linux系统,红帽linux系统下载(iso)
  14. 组成计算机硬件系统的基本部分为,组成计算机硬件系统的基本部分有哪些
  15. 单反相机参数之光圈、快门篇
  16. 通向实在之路暂记002:毕达哥拉斯定理与平行公设
  17. 虾皮台湾店标价是用台币吗?要如何定价?
  18. CMake中执行shell命令之execute_process、add_custom_target和add_custom_command
  19. mongodb数据文件格式
  20. 【细聊】torch.nn.init 初始化

热门文章

  1. OVS CT连接追踪实现NAT
  2. 用Python分析了数千个微信昵称后,发现了这些秘密!
  3. 01 面向就业的人工智能学习概述
  4. 酷派8150S(移动定制版)可用的第三方Recovery备份数据、刷机并精简系统内置APK经验...
  5. 神经网络中的线性和非线性---学习笔记
  6. 20亿老子不卖了!阿里与网易考拉谈崩
  7. Linux雷鸟邮件,thunderbird雷鸟mail
  8. 中国软件公司100强排名
  9. redis存取数据流
  10. MUR6060PT-ASEMI快恢复二极管MUR6060PT