===================
看了其他人的博客都写的很简洁干净,我这边的排版简直要晕。图和代码一起上,小白每一步都要有讲解。。。
===================
虽然weibo.com的模拟登陆用http://www.cnblogs.com/houkai/p/3487816.html的代码成功了,但是新版微博的标签太复杂,而且爬取一个用户的微博列表的时候,最底端是“正在加载”,不好模拟。因此改爬weibo.cn。
除此之外,weibo.cn比weibo.com更适合爬取的原因还有:
1、weibo.cn的模拟登陆步骤比weibo.com要简单;
2、微博列表是分页显示,目前每页有5条;
3、评论,转发列表都是静态加载。
先进行模拟登陆。模拟登陆有两种方法,在pc端操作:
1、user-agent用UC浏览器,模仿手机端,如http://blog.csdn.net/zhaolina004/article/details/28699095,步骤简单。需要注意的是,虽然在手机端可以采用保存登陆后页面即保存cookie下次直接登陆的方式,pc端则不行。
####15年4月 登陆后地址变为http://weibo.cn/?vt=4 不再显示gsid (事实上显示gsid的网址重定向到weibo.cn/?vt=4,以下截图中会显示,直接访问并不能进入登陆页面,用UC也不行)
####放弃
2、user-agent用Firefox浏览器,如http://qinxuye.me/article/simulate-weibo-login-in-python/,这篇是12年的文章,现在是15年4月,登陆页面地址和请求数据等都发生了改变,需要做一些修改。
=====================================================
试一下方法2, 边做边写:
1 importurllib22 importurllib3 importcookielib4
5 importlxml.html as HTML6
7 classFetcher(object):8 def __init__(self, username=None, pwd=None, cookie_filename=None):9 self.cj =cookielib.LWPCookieJar()10 if cookie_filename is notNone:11 self.cj.load(cookie_filename)12 self.cookie_processor =urllib2.HTTPCookieProcessor(self.cj)13 self.opener =urllib2.build_opener(self.cookie_processor, urllib2.HTTPHandler)14 urllib2.install_opener(self.opener)15
16 self.username =username17 self.pwd =pwd18 self.headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/14.0.1',19 'Referer':'','Content-Type':'application/x-www-form-urlencoded'}20
21 defget_rand(self, url):22 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',23 'Referer':''}24 req =urllib2.Request(url ,urllib.urlencode({}), headers)25 resp =urllib2.urlopen(req)26 login_page =resp.read()27 rand = HTML.fromstring(login_page).xpath("//form/@action")[0]28 passwd = HTML.fromstring(login_page).xpath("//input[@type='password']/@name")[0]29 vk = HTML.fromstring(login_page).xpath("//input[@name='vk']/@value")[0]30 returnrand, passwd, vk31
32 def login(self, username=None, pwd=None, cookie_filename=None):33 if self.username is None or self.pwd isNone:34 self.username =username35 self.pwd =pwd36 assert self.username is not N