python爬虫知乎问答

import cookielib
import base64
import re
import hashlib
import json
import rsa
import binascii
import urllib2
import urllib
import sys
from lxml import etree
#coding:utf-8

def get_username(username):
username=urllib.quote(username)
username=base64.encodestring(username)[:-1]
return username

def get_passwd(servertime,nonce,password):
rsa_e=65537
public_key='EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443'
encry_string=str(servertime)+'\t'+str(nonce)+'\n'+password
key=rsa.PublicKey(int(public_key,16),rsa_e)
encropy_pwd = rsa.encrypt(encry_string, key)
return binascii.b2a_hex(encropy_pwd)

def get_prelogin_args(pre_login):
prelogin_page=urllib2.urlopen(pre_login).read()
p=re.compile('\((.*?)\)')
json_data=p.search(prelogin_page).group(1)
data=json.loads(json_data)
servertime=data['servertime']
nonce=data['nonce']
return servertime,nonce

def do_login(login_url):
postdata={
'encoding':'UTF-8',
'entry':'weibo',
'from':'',
'gateway':'1',
'nonce':'',
'pagerefer':'http://login.sina.com.cn/sso/logout.php?entry=miniblog&r=http%3A%2F%2Fweibo.com%2Flogout.php%3Fbackurl%3D%252F',
'prelt':'45',
'pwencode':'rsa2',
'returntype':'META',
'rsakv':'1330428213',
'savestate':'7',
'servertime':'',
'service':'miniblog',
'sp':'',
'sr':'1366*768',
'su':'',
'url':'http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack',
'useticket':'1',
'vsnf':'1'
}
username='644202562@qq.com'
passwd='18956480156jf'
pre_login='http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=NjQ0MjAyNTYyJTQwcXEuY29tJTVD&rsakt=mod&checkpin=1&client=ssologin.js(v1.4.18)&_=1467687741384'
servertime,nonce=get_prelogin_args(pre_login)
postdata['servertime']=servertime
postdata['nonce']=nonce
su=get_username(username)
sp=get_passwd(servertime,nonce,passwd)
postdata['su']=su
postdata['sp']=sp
postdata=urllib.urlencode(postdata)
cookie_jar=cookielib.LWPCookieJar()
cookie_support=urllib2.HTTPCookieProcessor(cookie_jar)
opener2=urllib2.build_opener(cookie_support,urllib2.HTTPHandler)
urllib2.install_opener(opener2)
http_headers={'User-Agent': 'Mozilla/5.0 (X11; Linux i686; rv:8.0) Gecko/20100101 Firefox/8.0'}
req=urllib2.Request(login_url,data=postdata,headers=http_headers)
response=urllib2.urlopen(req)
test=response.read()
p1=re.compile('location\.replace\(\'(.*?)\'\)')
p2=re.compile('feedBackUrlCallBack\((.*?)\)')
url=p1.search(test).group(1)
login_page=urllib2.urlopen(url).read()
info=p2.search(login_page).group(1)
js_data=json.loads(info)
userinfo=js_data['userinfo']
final_login='http://weibo.com/' +userinfo['userdomain']
page=urllib2.urlopen(final_login).read()
type= sys.getfilesystemencoding()
content= page.decode("UTF-8").encode(type)
print 'Login Success!
return opener2,final_login

def get_fans(opener,final_login):
print final_login
page=opener.open(final_login).read()
type= sys.getfilesystemencoding()
content= page.decode("UTF-8").encode(type)
page=etree.HTML(page.lower().decode('utf-8','ignore'))
items=page.xpath('body/div[@class=\"WB_text W_f14\"][@node-type=\"feed_list_content\"]')
print items
#<div class=\"WB_text W_f14\" node-type=\"feed_list_content\" action-type=\"feed_list_ad\">
#<div class=\"WB_text W_f14\" node-type=\"feed_list_content\" >
#<div class=\"WB_text W_f14\" node-type=\"feed_list_content\" >

if __name__ == '__main__':
opener,final_ulr=do_login("http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.18)")
get_fans(opener,final_ulr)

p1=re.compile('<img id="captcha_image" src="(.*?)" alt=.*?>')
img_url=p1.search(page).group(1)
p2=re.compile('<input type="hidden" name="captcha-id" value="(.*?")/>')
img_id=p2.search(page).group(1)
post_data['captcha-id']=img_id
post_datda['captcha-solution']=img_id

http://www.hiry.cn

python爬虫知乎问答的更多相关文章

  1. python爬虫知乎

    在之前写过一篇使用python爬虫爬取电影天堂资源的博客,重点是如何解析页面和提高爬虫的效率.由于电影天堂上的资源获取权限是所有人都一样的,所以不需要进行登录验证操作,写完那篇文章后又花了些时间研究了 ...

  2. Python爬虫知乎文章,采集新闻60秒

    前言 发现很多人需要新闻的接口,所以自己去搜索了下,发现知乎上正好有对应的用户每天发布新闻简讯,所以自己想写一个新闻的爬虫.如果想做成接口的话,可以加上flask模块即可,这里就暂时只进行爬虫部分的编 ...

  3. python爬虫-知乎登录

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- ''' Required - requests (必须) - pillow (可选) ''' import ...

  4. Python爬虫 —— 知乎之selenium模拟登陆获取cookies+requests.Session()访问+session序列化

    代码如下: # coding:utf-8 from selenium import webdriver import requests import sys import time from lxml ...

  5. Python 爬虫模拟登陆知乎

    在之前写过一篇使用python爬虫爬取电影天堂资源的博客,重点是如何解析页面和提高爬虫的效率.由于电影天堂上的资源获取权限是所有人都一样的,所以不需要进行登录验证操作,写完那篇文章后又花了些时间研究了 ...

  6. python爬虫scrapy框架——人工识别登录知乎倒立文字验证码和数字英文验证码(2)

    操作环境:python3 在上一文中python爬虫scrapy框架--人工识别知乎登录知乎倒立文字验证码和数字英文验证码(1)我们已经介绍了用Requests库来登录知乎,本文如果看不懂可以先看之前 ...

  7. Python爬虫开源项目代码,爬取微信、淘宝、豆瓣、知乎、新浪微博、QQ、去哪网等 代码整理

    作者:SFLYQ 今天为大家整理了32个Python爬虫项目.整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快 1.WechatSogou [ ...

  8. 23个Python爬虫开源项目代码,包含微信、淘宝、豆瓣、知乎、微博等

    今天为大家整理了23个Python爬虫项目.整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心,所有链接指向GitHub,微信不能直接打开,老规矩,可以用电脑打开. 关注公众号「Pyth ...

  9. 23个Python爬虫开源项目代码:爬取微信、淘宝、豆瓣、知乎、微博等

    来源:全球人工智能 作者:SFLYQ 今天为大家整理了23个Python爬虫项目.整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快 1.Wec ...

随机推荐

  1. C++学习(四十)(C语言部分)之 学生管理系统设计

    涉及到的:指针申请内存 结构体数据结构部分排序文件操作 vs2013数据结构 排序 结构体 指针 功能:1.人工录入信息2.删除3.查找4.修改5.全部显示6.文件的读取和保存7.排序 设计:学生信息 ...

  2. cordova网络情况检测插件使用:cordova-plugin-network-information

    1. 添加插件 : cordova plugin add cordova-plugin-network-information 2. 调用方法: document.addEventListener(' ...

  3. zombodb 低级api 操作

    zombodb 低级api 允许直接从zombodb 索引中进行insert.delete 文档,同时保留了mvcc 的特性,但是数据没有存储在 pg 中,但是也带来数据上的风险,我们需要注意进行es ...

  4. JVM的基本结构及其各部分详解(二)

    3.2 栈帧组成之操作数栈 操作数栈是栈帧的主要内容之一,它主要用于保存计算过程中的中间结果,同时作为计算过程中变量临时的存储空间. 操作数栈也是一个先进后出的数据结构,只支持入栈和出栈两种操作,许多 ...

  5. 2017第45周一java多线程创建方法

    1. 从JDK1.5开始,Java提供了3种方式来创建,启动多线程: Ø 继承Thread类来创建线程类,重写run()方法作为线程执行体. Ø 实现Runnable接口来创建线程类,重写run()方 ...

  6. 浅谈JavaScript函数重载

    上个星期四下午,接到了网易的视频面试(前端实习生第二轮技术面试).面了一个多小时,自我感觉面试得很糟糕的,因为问到的很多问题都很难,根本回答不上来.不过那天晚上,还是很惊喜的接到了HR面电话.现在HR ...

  7. php微服务框架 PHP-MSF 的容器部署和使用

    评论:1 · 阅读:8412· 喜欢:1 一.需求 PHP-msf 是 Carema360 开发的 PHP 微服务框架,目前我没有实际用过,但是市面上的微服务框架要么在推崇 Spring 系,要么是  ...

  8. 利用Kettle 从Excel中抽取数据写入SQLite

    SQLite作为一种数据库可以配置为Kettle的数据输入和输出,这个例子是从Excel中抽取数据然后写入到SQLite中 配置测试并成功后如下 下面是配置步骤: Excel输入配置 sqlite配置 ...

  9. (Android第一行代码实验一)活动的最佳实践

    活动的最佳实践    1.知晓当前是在哪一个活动         这个技巧将教会你,如何根据程序当前的界面就能判断出这是哪一个活动.  首先需要新建一个 BaseActivity 继承自 Activi ...

  10. Dubbo-admin管理平台的安装

      1.到地址 https://github.com/alibaba/dubbo 下载dubbo源码  2.解压缩zip文件到 “ D:\技术资料\zookeeper\dubbo-master\dub ...