最近实验室的项目,需要一些真实的数据,而我们选择了从新浪微博抓取数据。对于新浪微博来说,只要登录了以后,微博以及关注和被关注等等信息才是可见的,所以要抓取,第一步是要模拟登录。

一开始,我打算按照这里的方法登录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模拟新浪微博登录相关推荐

  1. python的urllib2实现登录网页_python模拟网站登录(urllib、urllib2模拟登录)

    使用python模拟登录网站,首先要知道网站登录细节及相应的cookie. 分三步完成: 1,获取一个cookie 2,装载好自己的request 3,发送模拟登录请求 推荐阅读: Python模拟新 ...

  2. python 登录新浪微博_Python 模拟登录新浪微博

    在极客学院中看了一个关于爬虫的视频,然后自己实现一遍,并做此记录. 视频链接:http://www.jikexueyuan.com/course/995_4.html?ss=1 该文中的登录方式已经失 ...

  3. spirngmvc如何实现直接输入网页重定向到登录_Python 模拟新浪微博登录

    点击上方"小猿学 Python",选择"置顶公众号" 作者:北岛知寒 链接:https://www.cnblogs.com/crazyacking/p/5232 ...

  4. pythonurllib新浪微博_python模拟登录新浪微博抓取数据(cookielib和urllib2).doc

    HYPERLINK "/article/python/22972.html" /article/python/22972.html python模拟登录新浪微博抓取数据(cooki ...

  5. python模拟登录网站_Python模拟登录淘宝都实现了,你还怕模拟登录?

    文章转载自公众号 :裸睡的猪 , 作者 猪哥66 最近想爬取淘宝的一些商品,但是发现如果要使用搜索等一些功能时基本都需要登录,所以就想出一篇模拟登录淘宝的文章! 看了下网上有很多关于模拟登录淘宝,但是 ...

  6. python淘宝_Python模拟登录淘宝

    最近想爬取淘宝的一些商品,但是发现如果要使用搜索等一些功能时基本都需要登录,所以就想出一篇模拟登录淘宝的文章! 看了下网上有很多关于模拟登录淘宝,但是基本都是使用scrapy.pyppeteer.se ...

  7. python登录验证程序_Python模拟用户登录验证

    本文实例为大家分享了Python模拟用户登录验证的具体代码,供大家参考,具体内容如下 1.功能简介 此程序模拟用户登录验证的过程,实现用户名输入.黑名单检测.用户有效性判别.密码输入及验证等.用户在3 ...

  8. python 12306登录 2019_python爬虫--模拟12306登录

    模拟12306登录 超级鹰: #!/usr/bin/env python # coding:utf-8 import requests from hashlib import md5 class Ch ...

  9. java模拟新浪微博_Java模拟新浪微博登陆抓取数据

    前言: 兄弟们来了来了,最近有人在问如何模拟新浪微博登陆抓取数据,我听后默默地抽了一口老烟,暗暗的对自己说,老汉是时候该你出场了,所以今天有时间就整理整理,浅谈一二. 首先: 要想登陆新浪微博需要预登 ...

  10. java模拟新浪微博_Java模拟新浪微博用户注册

    模拟新浪微博用户注册 User.java package gather.sina; public class User { private String username; private Strin ...

最新文章

  1. hadoop job 未跑满资源_2018年第26周-解剖MapReduce Job
  2. OpenCV cv::CascadeClassifier人脸检测的实例(附完整代码)
  3. Java ME游戏开发中,碰撞检测算法在Java?ME中的实现(
  4. mysql 阿里云 版本_关于阿里云centos版本,mysql5.7的一些注意事项
  5. CMapStringToPtr::SetAt\CAsyncSocket
  6. 带你学 Redis:Redis安装(二)
  7. Python暴力破解凯撒加密的文本
  8. python调用woff_修改Python脚本以批量转换目录中的所有“WOFF”文件
  9. python 爬取百度日历
  10. 使用xpath批量爬取堆糖图片
  11. Excel 如何制作时间轴
  12. 平衡小车PID,就该这么调!!!
  13. 软件工程小项目~企业员工信息管理系统-需求分析~~
  14. 1026. 多米诺和三格骨牌铺瓦问题
  15. 关于洗地机电池容量问题,你怎么看
  16. 蓝屏代码0x00000074
  17. 科技爱好者周刊(第 213 期):知识孤岛,知识软件
  18. 2015年度社区之星 放榜啦
  19. web连接蓝牙电子秤navigator.bluetooth
  20. 抓取主板市盈率,市净率和股息率

热门文章

  1. 阿里云服务器申请免费ssl证书
  2. 十万火急的数据采集项目,爬虫代理测试对比
  3. 分布式架构,Java高级工程师必看系列
  4. 六步学会github入门使用
  5. 惠普计算机如何用u盘引导启动不了系统安装系统,惠普笔记本进BIOS设置U盘启动教程...
  6. 软件著作权登记申请容易通过吗?软著申请成功率高吗?
  7. 开源HTML编辑器xhEditor用法详解
  8. ZXing条形码识别框架识别的条型码的种类
  9. 工具类APP如何做ASO优化推广
  10. 联想笔记本触摸板的开启、关闭