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. Shell脚本、Shell脚本结构、date命令的用法、变量

    1.Shell脚本: shell是一种脚本语言 目的:可以实现自动化运维,能大大增加运维的效率.2.Shell脚本结构:   #!/bin/bash  以#!/bin/bash开头,即以/bin/ba ...

  2. php读取不到指定的php.ini配置

    新建启动脚本 启动时指定路径 解决方案一:修改  /etc/init.d/php-fpm 文件 1 # 在这行命令上添加 指定的配置路径 2 php_opts="--fpm-config $ ...

  3. py-day2-4 python 集合

    # 集合是由 { ,} 组成 test = {1,2,8,9,7,5} print(test) {1, 2, 5, 7, 8, 9} # 集合的结果是 去重的,且排序是 无序的 test = {1,2 ...

  4. SQL: 某个时间段范围内,产品有价格,且求平均数

    select ID,AVG(fPrice) as avgPrice from Price where Hp_Date >='2017-07-04' and Hp_Date <='2017- ...

  5. [转]C#程序性能优化

    C#程序性能优化 1.显式注册的EvenHandler要显式注销以避免内存泄漏 将一个成员方法注册到某个对象的事件会造成后者持有前者的引用.在事件注销之前,前者不会被垃圾回收.   private v ...

  6. JavaScript常见的代码精简

    1.&& callback && callback() 等价于: if(callback){ callback(); } 表达的意思: 先判断 callback 是不是 ...

  7. C++ Programming Language中的narrow_cast实现

    在C++中,各种数值类型的转化是C++编译过程中警告的主要来源,但是,很多时候,我们需要使用各种数值类型,例如我们用数组的某一位表示大小为对应序号的值,这种情况下,经常会涉及多种数值类型.根据C++ ...

  8. google的protobuf简单介绍

    google的protobuf是一种轻便高效的结构化数据存储格式,在通信协议和数据存储等领域中使用比较多.protobuf对于结构中的每个成员,会提供set系列函数和get系列函数. 但是,对于使用来 ...

  9. Android仿淘宝继续上拉进入商品详情页的效果,使用双Fragment动画切换;

    仿淘宝继续上拉进入商品详情页的效果,双Fragment实现: 动画效果: slide_above_in.xml <?xml version="1.0" encoding=&q ...

  10. Vue 重点 必须要记住的

    基础知识: vue的生命周期: beforeCreate/created. beforeMount/mounted. beforeUpdate/updated. beforeDestory/desto ...