用Python制作新浪微博爬虫

早上刷空间发现最近好多人过生日诶~

仔细想想,好像4月份的时候也是特别多人过生日【比如我

那么每个人生日的月份有什么分布规律呢。。。突然想写个小程序统计一下

最简单易得的生日数据库大概就是新浪微博了:

但是电脑版的新浪微博显然是动态网页。。。如果想爬这个应该要解析JS脚本【就像上次爬网易云音乐。。然而并不会解

其实有更高效的方法:爬移动版

移动版因为手机浏览器的限制大多都做了简化,更有利于爬虫

注意上面的网址:http://weibo.cn/5156584529/info

经测试不同的用户仅仅是中间的数字不同,那么只要枚举数字就可以实现爬虫了~

但是移动版微博想查看用户资料是必须要登录的。所以我们要先模拟登录,获取cookie,再访问url,获取用户资料。

许多网站的登录都用到了cookie,大体过程如下:

用户输入用户名密码,浏览器将这些组成一个form(表单)提交给服务器,若服务器判断用户名密码正确则会返回一个cookie,然后浏览器会记录下这个cookie。之后用本地的cookie再访问就不用登录了。

模拟登录:

打开微博移动版主页http://weibo.cn,点击登录,得到登录地址:

http://login.weibo.cn/login/?ns=1&revalid=2&backURL=http%3A%2F%2Fweibo.cn%2F&backTitle=%CE%A2%B2%A9&vt=

【这界面真的好丑。。。

输入用户名密码登录,用chrome抓包,查看表单:

其实我们只需要表单就够了。

用Python中的urllib2,使用表单数据访问登录页,获取cookie,再用cookie访问用户页即可。

但是还要注意一个问题:新浪微博作了反爬虫处理,因此会遇到这个错误:

urllib2.HTTPError: HTTP Error 403: Forbidden

所以还要加上一个头信息headers来冒充浏览器

code:

 1 __author__ = ‘IBM‘
 2 import urllib2
 3 import urllib
 4 import cookielib
 5 headers = {‘User-Agent‘:‘Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6‘}
 6 cookie = cookielib.CookieJar()
 7 opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
 8
 9 #uurl=‘http://weibo.cn/5156582529/info‘
10 wurl=‘http://login.weibo.cn/login/?backURL=&backTitle=&vt=4&revalid=2&ns=1‘
11
12 logindata=urllib.urlencode(
13     {
14         ‘mobile‘:‘不许偷看我手机号!‘,
15         ‘password_8199‘:‘不许偷看我密码!‘,
16         ‘remember‘:‘on‘,
17         ‘backURL‘:‘http%253A%252F%252Fweibo.cn%252F‘,
18         ‘backTitle‘:‘%E5%BE%AE%E5%8D%9A‘,
19         ‘tryCount‘:‘‘,
20         ‘vk‘:‘8199_4012_2261332562‘,
21         ‘submit‘:‘%E7%99%BB%E5%BD%95‘
22     }
23 )
24
25 loginreq=urllib2.Request(
26     url=wurl,
27     data=logindata,
28     headers=headers
29 )
30
31 loginres=opener.open(loginreq)
32 print loginres.read()
33
34 html=opener.open(urllib2.Request(url=‘http://weibo.cn/5156584529/info‘,headers=headers))
35 dat=html.read()
36 print dat

输出的dat就是用户资料页的HTML。随便想要什么信息都可以去里面找啦~

【但是目前还有个问题没解决:注意表单里红色underline的那两段:

经测试这两个数字每次登录的时候都是不一样的。。而且同一个数字有效期是一定的,也就是说过一会儿这段代码可能就登录不了了。。。

个人猜测这可能是为了反爬虫吧。。。

under construction

Ref:

http://blog.csdn.net/pleasecallmewhy/article/details/9305229

http://www.douban.com/note/131370224/

时间: 2024-08-19 10:10:17

用Python制作新浪微博爬虫的相关文章

Windows 环境下运用Python制作网络爬虫

import webbrowser as web import time import os i = 0 MAXNUM = 1 while i <= MAXNUM: web.open_new_tab('要刷的网络地址') os.system('taskkill /F /IM 浏览器文件名(chrome.exe)') i += 1 else: print 'happly day!' 代码和简单只要一个第三方的函数和调用系统的文件就OK了.记住给要刷的次数定值,不然电脑就不好受了! Windows

最新Python新浪微博爬虫2014-07

之前微博的登陆密码加密是三层sha1算法,现在更改为rsa2算法 下面是python脚本,并把首页账号首页微博抓取下来. 亲测可行. #! /usr/bin/env python # -*- coding: utf-8 -*- import sys import urllib2 import urllib import json import re import base64 import hashlib import rsa import binascii import cookielib b

dota玩家与英雄契合度的计算器,python语言scrapy爬虫的使用

首发:个人博客,更新&纠错&回复 演示地址在这里,代码在这里. 一个dota玩家与英雄契合度的计算器(查看效果),包括两部分代码: 1.python的scrapy爬虫,总体思路是page->model->result,从网页中提取数据,组成有意义的数据结构,再拿这数据结构做点什么. 在这个项目中,爬虫的用处是从游久网dota数据库上抓取dota英雄和物品的数据和照片存到本地磁盘,数据存为json格式,方便在网页应用中直接使用. 2.网页应用,使用dota英雄数据.自己编写的小伙

利用Python制作王者荣耀出装小助手,引来了老板的注意!

导语 T_T并不玩这些游戏... 单纯来蹭个热点... 大概是因为蹭热点需要的技术含量比较低? 就这样吧~~~ 利用Python制作命令行版的王者荣耀出装小助手. Let's Go! 开发工具 Python版本:3.6.4 相关模块: requests模块: 以及一些Python自带的模块. 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 主要思路 爬的是<英雄联盟盒子>这个APP.用Fiddler抓包找到需要的Get请求地址即可... 不过显示的Get请求很长,在

利用aiohttp制作异步爬虫

简介asyncio可以实现单线程并发IO操作,是Python中常用的异步处理模块.关于asyncio模块的介绍,笔者会在后续的文章中加以介绍,本文将会讲述一个基于asyncio实现的HTTP框架--aiohttp,它可以帮助我们异步地实现HTTP请求,从而使得我们的程序效率大大提高.本文将会介绍aiohttp在爬虫中的一个简单应用.在原来的项目中,我们是利用Python的爬虫框架scrapy来爬取当当网图书畅销榜的图书信息的.在本文中,笔者将会以两种方式来制作爬虫,比较同步爬虫与异步爬虫(利用a

[踩坑]python实现并行爬虫

问题背景:指定爬虫depth.线程数, python实现并行爬虫   思路:    单线程 实现爬虫类Fetcher                 多线程 threading.Thread去调Fetcher  方法:Fetcher 中,用urllib.urlopen打开指定url,读取信息: response = urllib.urlopen(self.url) content = response.read() 但是这样有问题, 比如对于www.sina.com来说,读出来的content是

Python 提取新浪微博的博文中的元素(包含Text, Screen_name)

CODE: #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2014-7-8 @author: guaguastd @name: extractWeiboEntities.py ''' if __name__ == '__main__': import json # get weibo_api to access sina api from sinaWeiboLogin import sinaWeiboLogin sinaWeib

Python 对新浪微博的博文元素 (Word, Screen Name)的频率分析

CODE: #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2014-7-9 @author: guaguastd @name: weiboFrequencyAnalysis.py ''' if __name__ == '__main__': # get weibo_api to access sina api from sinaWeiboLogin import sinaWeiboLogin sinaWeiboApi = sin

Python 获取新浪微博的热门话题 (API)

#!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2014-06-27 @author: guaguastd ''' import json # Refer to http://blog.csdn.net/guaguastd/article/details/33664443 from login import weibo_login # sina weibo basic secret information APP_KEY = ''