环境:系统:windows 7版本:python 3.3IDE: PyCharm 4.0.4

#!/usr/bin/env python3
# -- coding: utf-8 --
import time
import base64
import rsa
import binascii
import requests
import re
import random
try:
import cookielib
except:
import http.cookiejar as cookielib

try:from PIL import Image
except:pass
try:from urllib.parse import quote_plus
except:from urllib import quote_plus'''
如果没有开启登录保护,不用输入验证码就可以登录
如果开启登录保护,需要输入验证码'''# 构造 Request headers
agent = 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0'
headers = {# "Host": "www.weibo.com",'User-Agent': agent
}session = requests.session()
session.cookies = cookielib.LWPCookieJar(filename='cookies')
try:session.cookies.load(ignore_discard=True)
except:print("Cookie 未能加载")# 访问 初始页面带上 cookie
index_url = "http://weibo.com/login.php"
try:session.get(index_url, headers=headers, timeout=2)
except:session.get(index_url, headers=headers)
try:input = raw_input
except:passdef get_su(username):"""对 email 地址和手机号码 先 javascript 中 encodeURIComponent对应 Python 3 中的是 urllib.parse.quote_plus然后在 base64 加密后decode"""username_quote = quote_plus(username)username_base64 = base64.b64encode(username_quote.encode("utf-8"))return username_base64.decode("utf-8")# 预登陆获得 servertime, nonce, pubkey, rsakv
def get_server_data(su):pre_url = "http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su="pre_url = pre_url + su + "&rsakt=mod&checkpin=1&client=ssologin.js(v1.4.18)&_="pre_url = pre_url + str(int(time.time() * 1000))pre_data_res = session.get(pre_url, headers=headers)sever_data = eval(pre_data_res.content.decode("utf-8").replace("sinaSSOController.preloginCallBack", ''))return sever_data# print(sever_data)def get_password(password, servertime, nonce, pubkey):rsaPublickey = int(pubkey, 16)key = rsa.PublicKey(rsaPublickey, 65537)  # 创建公钥message = str(servertime) + '\t' + str(nonce) + '\n' + str(password)  # 拼接明文js加密文件中得到message = message.encode("utf-8")passwd = rsa.encrypt(message, key)  # 加密passwd = binascii.b2a_hex(passwd)  # 将加密信息转换为16进制。return passwddef get_cha(pcid):cha_url = "http://login.sina.com.cn/cgi/pin.php?r="cha_url = cha_url + str(int(random.random() * 100000000)) + "&s=0&p="cha_url = cha_url + pcidcha_page = session.get(cha_url, headers=headers)with open("cha.jpg", 'wb') as f:f.write(cha_page.content)f.close()try:im = Image.open("cha.jpg")im.show()im.close()except:print(u"请到当前目录下,找到验证码后输入")def login(username, password):# su 是加密后的用户名su = get_su(username)sever_data = get_server_data(su)servertime = sever_data["servertime"]nonce = sever_data['nonce']rsakv = sever_data["rsakv"]pubkey = sever_data["pubkey"]showpin = sever_data["showpin"]password_secret = get_password(password, servertime, nonce, pubkey)postdata = {'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",'vsnf': '1','su': su,'service': 'miniblog','servertime': servertime,'nonce': nonce,'pwencode': 'rsa2','rsakv': rsakv,'sp': password_secret,'sr': '1366*768','encoding': 'UTF-8','prelt': '115','url': 'http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack','returntype': 'META'}
login_url = 'http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.18)'
if showpin == 0:login_page = session.post(login_url, data=postdata, headers=headers)
else:pcid = sever_data["pcid"]get_cha(pcid)postdata['door'] = input(u"请输入验证码")login_page = session.post(login_url, data=postdata, headers=headers)
login_loop = (login_page.content.decode("GBK"))
# print(login_loop)
pa = r'location\.replace\([\'"]http://blog.csdn.net/dai_jing/article/details/(.*?)[\'"]\)'
loop_url = re.findall(pa, login_loop)[0]
# print(loop_url)
# 此出还可以加上一个是否登录成功的判断,下次改进的时候写上
login_index = session.get(loop_url, headers=headers)
uuid = login_index.text
uuid_pa = r'"uniqueid":"http://blog.csdn.net/dai_jing/article/details/(.*?)"'
uuid_res = re.findall(uuid_pa, uuid, re.S)[0]
web_weibo_url = "http://weibo.com/%s/profile?topnav=1&wvr=6&is_all=1" % uuid_res
weibo_page = session.get(web_weibo_url, headers=headers)
weibo_pa = r'

上面引用的lib3是我自己写的一个http接口

fileWriter.py__author__ = 'zhengjinwei'
#coding=utf-8
import osclass FileWriter:def __init__(self,fileDir,fileName,format):self.mkDir(fileDir)self.f = open(fileDir+u"/"+fileName,format)def mkDir(self,path):isExists = os.path.exists(path)if not isExists:os.makedirs(path)
def write(self,contents):return self.f.write(contents)def close(self):self.f.close()
spider.py
#coding:utf-8
__author__ = 'zhengjinwei'import  re
import requeststry:import cookielib
except:import http.cookiejar as cookielibclass Spider:def __init__(self,userAgent):self.user_agent = userAgentself.headers = {'User-Agent' : self.user_agent}
def getHttp(self,url,param=None):return requests.get(url,param,headers=self.headers)def postHttp(self,url,postData=None):return requests.post(url, data=postData,headers=self.headers)def sessionPostHttp(self,url,param=None):session = requests.session()session.cookies = cookielib.LWPCookieJar(filename='cookies')try:session.cookies.load(ignore_discard=True)print(url,param)return session.post(url,data=param,json=None,headers=self.headers)except:print("Cookie 未能加载")return Nonedef sessionGetHttp(self,url,param=None):session = requests.session()session.cookies = cookielib.LWPCookieJar(filename='cookies')try:session.cookies.load(ignore_discard=True)return session.get(url, headers=self.headers, allow_redirects=False)except:print("Cookie 未能加载")return None
def parseReg(self,content,strPattern,count):pattern = re.compile(strPattern,re.S)items = re.findall(pattern,content)contents=[]for item in items:temArr = []for i in range(0,count):temArr.append(item[i])contents.append(temArr)return contentsdef getContents(self,url,strPattern,count,method="get",param=None):page = ""if method == "get":page = self.getHttp(url,param).textelse:page = self.postHttp(url,param).textpattern = re.compile(strPattern,re.S)items = re.findall(pattern,page)contents=[]for item in items:temArr = []for i in range(0,count):temArr.append(item[i])contents.append(temArr)return contents# demo = Spider("Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko")
#
# t = demo.getHttp("https://www.baidu.com/index.php?tn=02049043_23_pg")

效果图:注意事项:

1,新浪微博本身有查看限制,只能查看到前5页的数据

2,爬虫工具可以使用火狐浏览器,装上fireDebug 插件用于拦截消息,获取cookie和其他参数

让你了解python的强大!【 登录新浪微博爬取粉丝信息】相关推荐

  1. python 登录新浪微博爬取粉丝信息

    最近有个小需求,爬取新浪微博的粉丝信息,弄了好几天,终于搞定,送上代码: 环境: 系统:windows 7 版本:python 3.3 IDE: PyCharm 4.0.4 参考:http://blo ...

  2. 如何爬取微博全部粉丝python_python 登录新浪微博爬取粉丝信息

    最近有个小需求,爬取新浪微博的粉丝信息,弄了好几天,终于搞定,送上代码: 环境: 系统:windows 7 版本:python 3.3 IDE: PyCharm 4.0.4 参考:https://bl ...

  3. 如何爬取微博全部粉丝python_让你了解python的强大!【 登录新浪微博爬取粉丝信息】...

    环境: 系统:windows 7 版本:python 3.3 IDE: PyCharm 4.0.4 #!/usr/bin/env python3 # -*- coding: utf-8 -*- imp ...

  4. python使用Cookie登录网页爬取信息(超简单)

    python使用Cookie登录网页爬取信息(超简单) 因为工作原因,需要爬取一个医疗行业的网站的信息,而且目标网站还要登录才给你展现完整的页面,所以有了本文-- 看了好多爬取需要登录的博客,过程不表 ...

  5. [python应用案例] 一.BeautifulSoup爬取天气信息并发送至QQ邮箱

    前面作者写了很多Python系列文章,包括: Python基础知识系列:Python基础知识学习与提升 Python网络爬虫系列:Python爬虫之Selenium+Phantomjs+CasperJ ...

  6. 使用python解决验证码登录并爬取登录后的个人界面:本篇以古诗文网站为例

    爬取总结记录:由于经验不足,个人尝试了很多方法,都失败了,查看了网站的上面别人的爬取经验,按照别人做的,但都没有成功. 几经波折最后终于解决了. 好了上代码: 其中有涉及到个人信息的,这里进行了模糊处 ...

  7. python爬虫实例方法(批量爬取网页信息基础代码)

    文章目录 前言 一.爬虫实例 0.爬取深圳租房信息 1.爬取深圳算法岗位信息 2.爬取猫图片(基于 selenium库 模拟人自动点击) 3.爬取小说纳兰无敌并生成词云 二.用到的库 1.正则表达式 ...

  8. python 语音播报库_Python爬取天气信息并语音播报

    导读 爬虫是爬取网页的相关内容,了解HTML能够帮助你更好的理解网页的结构.内容等. TCP/IP协议,HTTP协议这些知识了解一下就可以,能够让你了解在网络请求和网络传输上的基本原理,这次的小案例用 ...

  9. python爬虫,从hao123爬取网址信息

    最近研究python的爬虫,小小程序,拿下来分享,本人使用python3.7,纯粹兴趣爱好,希望能帮助大家激发兴趣.从hao123,爬取各种网址信息,代码如下. import urllib.reque ...

最新文章

  1. python分布式任务调度_Python使用Celery分布式异步队列/任务调度(基于Redis) - pytorch中文网...
  2. 安波副教授:分布式人工智能进展与趋势
  3. 老李分享:接口测试之jmeter
  4. jsap支付_Java命令行界面(第20部分):JSAP
  5. wordpress functions.php 在哪,在functions.php中定义变量并在WordPress中的函数钩子中访问它们...
  6. android java11,Android RxJava1 入门教程
  7. 自动化测试指南-自动化测试工程师必备的技能
  8. c# 获取excel单元格公式结果_EXCEL公式解析:单元格中数字去重排序思路及公式详解...
  9. Flink 1.11 SQL 使用攻略
  10. LinearLayout布局问题
  11. w7查看计算机每天开关机时间,WINDOWS7 怎么查看上次开关机时间
  12. 程序员在囧途之风投五宗罪
  13. iOS播放器SDK-基于FFmpeg解码OpenGL渲染-CYPlayer
  14. 明星代言的商品一般都不便宜,为何还那么受青睐?
  15. 产品读书《六顶思考帽》
  16. android studio编程时出现的错误:Cannot get property 'XXXX' on extra properties extension as it does not exis
  17. 2023 上海(深圳)国际导热散热材料及设备展览会
  18. Java调用Google Analytics API实现网站统计
  19. linux系统文件系统格式转换--不丢文件
  20. mysql 存储 session

热门文章

  1. Winserver 2016搭建AD域
  2. 男孩报计算机网络技术专业,男孩大学报什么专业比较好
  3. 2016总结 --- 一只井底之蛙的惊叹
  4. 无人车仿真:带反馈的绕圈路径实现
  5. 音遇怎么玩?音遇APP技术和玩法解析
  6. Spring Cloud -> Spring Cloud Netflix Eureka快速搭建(一)
  7. File Zilla搭建FTP服务器时出现的报错
  8. Windows2008 r2 x64下安装FTP服务器File Zilla server报错:could not load tls libraries filezilla
  9. WIN10注册表出现“无法删除所有指定的值”解决办法
  10. cnn卷积神经网络反向传播,cnn正向传播和反向传播