python 登录新浪微博_Python模拟新浪微博登录
最近实验室的项目,需要一些真实的数据,而我们选择了从新浪微博抓取数据。对于新浪微博来说,只要登录了以后,微博以及关注和被关注等等信息才是可见的,所以要抓取,第一步是要模拟登录。
一开始,我打算按照这里的方法登录weibo.com并获取信息,但是发现新浪微博初始的页面的数据是放在JS中并以json格式存放的,页面加载的时候才渲染到HTML中,于是我解析了JS代码,证明此法可行,但是接下来遇到问题,因为我们打开新浪微博是不会一次性加载的,移到页面低端的时候才会加载一部分,这个很难模拟,虽然可以通过分析ajax数据得到,但是由于GET的参数多达十几个,这需要时间来分析这些参数的含义,这么做很麻烦。于是我想到,可以通过登录手机版的微博:weibo.cn来获取,而手机版的页面几乎没有JS,数据几乎都在HTML中,而且加载剩余的数据是通过分页进行的。
weibo.cn和weibo.com不是使用一种登录机制,下面直接贴出代码,代码的内容并不难,主要是登录的流程。
代码中用到了lxml库来解析HTML。Windows系统可以在这里下载二进制包。
import urllib2
import urllib
import cookielib
import lxml.html as HTML
class Fetcher(object):
def __init__(self, username=None, pwd=None, cookie_filename=None):
self.cj = cookielib.LWPCookieJar()
if cookie_filename is not None:
self.cj.load(cookie_filename)
self.cookie_processor = urllib2.HTTPCookieProcessor(self.cj)
self.opener = urllib2.build_opener(self.cookie_processor, urllib2.HTTPHandler)
urllib2.install_opener(self.opener)
self.username = username
self.pwd = pwd
self.headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/14.0.1',
'Referer':'','Content-Type':'application/x-www-form-urlencoded'}
def get_rand(self, url):
headers = {'User-Agent':'Mozilla/5.0 (Windows;U;Windows NT 5.1;zh-CN;rv:1.9.2.9)Gecko/20100824 Firefox/3.6.9',
'Referer':''}
req = urllib2.Request(url ,urllib.urlencode({}), headers)
resp = urllib2.urlopen(req)
login_page = resp.read()
rand = HTML.fromstring(login_page).xpath("//form/@action")[0]
passwd = HTML.fromstring(login_page).xpath("//input[@type='password']/@name")[0]
vk = HTML.fromstring(login_page).xpath("//input[@name='vk']/@value")[0]
return rand, passwd, vk
def login(self, username=None, pwd=None, cookie_filename=None):
if self.username is None or self.pwd is None:
self.username = username
self.pwd = pwd
assert self.username is not None and self.pwd is not None
url = 'http://3g.sina.com.cn/prog/wapsite/sso/login.php?ns=1&revalid=2&backURL=http%3A%2F%2Fweibo.cn%2F&backTitle=%D0%C2%C0%CB%CE%A2%B2%A9&vt='
rand, passwd, vk = self.get_rand(url)
data = urllib.urlencode({'mobile': self.username,
passwd: self.pwd,
'remember': 'on',
'backURL': 'http://weibo.cn/',
'backTitle': '新浪微博',
'vk': vk,
'submit': '登录',
'encoding': 'utf-8'})
url = 'http://3g.sina.com.cn/prog/wapsite/sso/' + rand
req = urllib2.Request(url, data, self.headers)
resp = urllib2.urlopen(req)
page = resp.read()
link = HTML.fromstring(page).xpath("//a/@href")[0]
if not link.startswith('http://'): link = 'http://weibo.cn/%s' % link
req = urllib2.Request(link, headers=self.headers)
urllib2.urlopen(req)
if cookie_filename is not None:
self.cj.save(filename=cookie_filename)
elif self.cj.filename is not None:
self.cj.save()
print 'login success!'
def fetch(self, url):
print 'fetch url: ', url
req = urllib2.Request(url, headers=self.headers)
return urllib2.urlopen(req).read()
登录完成后,就可以访问相应的页面来进行HTML的解析了。
python 登录新浪微博_Python模拟新浪微博登录相关推荐
- python的urllib2实现登录网页_python模拟网站登录(urllib、urllib2模拟登录)
使用python模拟登录网站,首先要知道网站登录细节及相应的cookie. 分三步完成: 1,获取一个cookie 2,装载好自己的request 3,发送模拟登录请求 推荐阅读: Python模拟新 ...
- python 登录新浪微博_Python 模拟登录新浪微博
在极客学院中看了一个关于爬虫的视频,然后自己实现一遍,并做此记录. 视频链接:http://www.jikexueyuan.com/course/995_4.html?ss=1 该文中的登录方式已经失 ...
- spirngmvc如何实现直接输入网页重定向到登录_Python 模拟新浪微博登录
点击上方"小猿学 Python",选择"置顶公众号" 作者:北岛知寒 链接:https://www.cnblogs.com/crazyacking/p/5232 ...
- pythonurllib新浪微博_python模拟登录新浪微博抓取数据(cookielib和urllib2).doc
HYPERLINK "/article/python/22972.html" /article/python/22972.html python模拟登录新浪微博抓取数据(cooki ...
- python模拟登录网站_Python模拟登录淘宝都实现了,你还怕模拟登录?
文章转载自公众号 :裸睡的猪 , 作者 猪哥66 最近想爬取淘宝的一些商品,但是发现如果要使用搜索等一些功能时基本都需要登录,所以就想出一篇模拟登录淘宝的文章! 看了下网上有很多关于模拟登录淘宝,但是 ...
- python淘宝_Python模拟登录淘宝
最近想爬取淘宝的一些商品,但是发现如果要使用搜索等一些功能时基本都需要登录,所以就想出一篇模拟登录淘宝的文章! 看了下网上有很多关于模拟登录淘宝,但是基本都是使用scrapy.pyppeteer.se ...
- python登录验证程序_Python模拟用户登录验证
本文实例为大家分享了Python模拟用户登录验证的具体代码,供大家参考,具体内容如下 1.功能简介 此程序模拟用户登录验证的过程,实现用户名输入.黑名单检测.用户有效性判别.密码输入及验证等.用户在3 ...
- python 12306登录 2019_python爬虫--模拟12306登录
模拟12306登录 超级鹰: #!/usr/bin/env python # coding:utf-8 import requests from hashlib import md5 class Ch ...
- java模拟新浪微博_Java模拟新浪微博登陆抓取数据
前言: 兄弟们来了来了,最近有人在问如何模拟新浪微博登陆抓取数据,我听后默默地抽了一口老烟,暗暗的对自己说,老汉是时候该你出场了,所以今天有时间就整理整理,浅谈一二. 首先: 要想登陆新浪微博需要预登 ...
- java模拟新浪微博_Java模拟新浪微博用户注册
模拟新浪微博用户注册 User.java package gather.sina; public class User { private String username; private Strin ...
最新文章
- hadoop job 未跑满资源_2018年第26周-解剖MapReduce Job
- OpenCV cv::CascadeClassifier人脸检测的实例(附完整代码)
- Java ME游戏开发中,碰撞检测算法在Java?ME中的实现(
- mysql 阿里云 版本_关于阿里云centos版本,mysql5.7的一些注意事项
- CMapStringToPtr::SetAt\CAsyncSocket
- 带你学 Redis:Redis安装(二)
- Python暴力破解凯撒加密的文本
- python调用woff_修改Python脚本以批量转换目录中的所有“WOFF”文件
- python 爬取百度日历
- 使用xpath批量爬取堆糖图片
- Excel 如何制作时间轴
- 平衡小车PID,就该这么调!!!
- 软件工程小项目~企业员工信息管理系统-需求分析~~
- 1026. 多米诺和三格骨牌铺瓦问题
- 关于洗地机电池容量问题,你怎么看
- 蓝屏代码0x00000074
- 科技爱好者周刊(第 213 期):知识孤岛,知识软件
- 2015年度社区之星 放榜啦
- web连接蓝牙电子秤navigator.bluetooth
- 抓取主板市盈率,市净率和股息率