登录百度下载博客

#coding:utf8

#Author = [email protected]

#Create = 20120517

import cookielib, urllib2, urllib

import os, sys,socket ,re

#解析有多少页博客

pageStr = """allCount : ‘(\d+)‘,\s+pageSize : ‘(\d+)‘"""

pageObj = re .compile(pageStr, re .DOTALL)

#获取登陆token

login_tokenStr = ‘‘‘bdPass.api.params.login_token=‘(.*?)‘;‘‘‘

login_tokenObj = re .compile(login_tokenStr,re .DOTALL)

#获取博客标题和url

blogStr = r‘‘‘<div class="hide q-username"><a href=".*?" class=a-normal target=_blank>.*?</a></div><a href="(.*?)" class="a-incontent a-title cs-contentblock-hoverlink" target=_blank>(.*?)</a></div><div class="item-content cs-contentblock-detailcontent">‘‘‘

blogObj = re .compile(blogStr,re .DOTALL)

class Baidu(object ):

def __init__(self ,user = ‘‘ , psw = ‘‘ , blog = ‘‘ ):

self .user = user#暂未考虑中文 ID

self .psw  = psw

self .blog = blog

if not os.path .exists( self.user ):

os .mkdir( self.user )

self .cookiename = ‘baidu%s.coockie‘ % ( self.user )

self .token = ‘‘

self .allCount  = 0

self .pageSize  = 10

self .totalpage = 0

self .logined = False

self .cj = cookielib.LWPCookieJar ()

try:

self .cj. revert(self .cookiename)

self .logined = True

print "OK"

except Exception,e:

print e

self .opener = urllib2.build_opener(urllib2.HTTPCookieProcessor (self. cj))

self .opener. addheaders = [(‘User-agent‘,‘Opera/9.23‘)]

urllib2 .install_opener(self.opener )

socket .setdefaulttimeout(30)

#登陆百度

def login(self ):

#如果没有获取到cookie,就模拟登陆一下

if not self.logined :

print "need logon"

#第一次访问一下,目的是为了先保存一个 cookie下来

qurl = ‘‘‘https://passport.baidu.com/v2/api/?getapi&class=login&tpl=mn&tangram=false‘‘‘

r = self. opener.open (qurl)

self .cj. save(self .cookiename)

#第二次访问,目的是为了获取 token

qurl = ‘‘‘https://passport.baidu.com/v2/api/?getapi&class=login&tpl=mn&tangram=false‘‘‘

r = self. opener.open (qurl)

rsp = r. read()

self .cj. save(self .cookiename)

#通过正则表达式获取token

matched_objs = login_tokenObj.findall(rsp )

if matched_objs:

self .token = matched_objs[0 ]

print self. token

#然后用token 模拟登陆

post_data = urllib.urlencode({‘username‘ :self. user,

‘password‘:self .psw,

‘token‘:self .token,

‘charset‘:‘UTF-8‘ ,

‘callback‘:‘parent.bd12Pass.api.login._postCallback‘ ,

‘index‘:‘0‘ ,

‘isPhone‘:‘false‘ ,

‘mem_pass‘:‘on‘ ,

‘loginType‘:‘1‘ ,

‘safeflg‘:‘0‘ ,

‘staticpage‘:https://passport.baidu.com/v2Jump.html,

‘tpl‘:‘mn‘ ,

‘u‘:http://www.baidu.com/,

‘verifycode‘:‘‘ ,

})

#path = ‘http://passport.baidu.com/?login

path =http://passport.baidu.com/v2/api/?login

self .opener = urllib2.build_opener(urllib2.HTTPCookieProcessor (self. cj))

self .opener. addheaders = [(‘User-agent‘,‘Opera/9.23‘)]

urllib2 .install_opener(self.opener )

headers = {

"Accept": "image/gif, */*",

"Referer": "https://passport.baidu.com/v2/?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F" ,

"Accept-Language": "zh-cn",

"Content-Type": "application/x-www-form-urlencoded" ,

"Accept-Encoding": "gzip, deflate",

"User-Agent": "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)",

"Host": "passport.baidu.com",

"Connection": "Keep-Alive",

"Cache-Control": "no-cache"

}

req = urllib2.Request(path ,

post_data ,

headers =headers,

)

rsp = self. opener.open (req). read()

#如果觉得有必要的话,在这里自己读一下 rsp判断一下是否登陆OK,我打印过登陆没问题

self .cj. save(self .cookiename)

else:

print "Login Fail"

sys .exit( 0)

#获取博客一共有多少页,如果有私有博客的话,登陆和不登陆获取的是不一样的

def getTotalPage(self ):

#获取博客的总页数

req2 = urllib2.Request(self .blog)

rsp = urllib2.urlopen(req2 ).read()

if rsp:

rsp = rsp. replace(‘\r‘ ,‘‘). replace(‘\n‘ ,‘‘). replace(‘\t‘ ,‘‘)

matched_objs = pageObj.findall(rsp )

if matched_objs:

obj0 ,obj1 = matched_objs[0 ]

self .allCount = int(obj0 )

self .pageSize = int(obj1 )

self .totalpage = (self .allCount / self.pageSize ) + 1

print self. allCount,self .pageSize,self.totalpage

#获取每一页里的博客链接

def fetchPage(self ,url):

req = urllib2.Request(url )

rsp = urllib2.urlopen(req ).read()

if rsp:

rsp = rsp. replace(‘\r‘ ,‘‘). replace(‘\n‘ ,‘‘). replace(‘\t‘ ,‘‘)

matched_objs = blogObj.findall(rsp )

if matched_objs:

for obj in matched_objs:

#这里可以用多线程改写一下 ,单线程太慢

self .download(obj[0 ],obj[ 1])

def downloadBywinget(self ,url, title):

pass#比如使用 wget之类的第三方工具,自己填参数写

#下载博客

def download(self ,url, title):

path = ‘%s/%s.html‘ % (self .user, title.decode (‘utf-8‘))

url =http://hi.baidu.com%s% (url)

print "Download url %s" % (url )

nFail = 0

while nFail < 5:

try:

sock = urllib.urlopen(url )

htmlSource = sock. read()

myfile = file( path,‘w‘ )

myfile .write( htmlSource)

myfile .close()

sock .close()

return

except:

nFail += 1

print ‘download blog fail:%s‘ % (url )

def dlownloadall(self ):

for page in range(1 ,self. totalpage+1 ):

url = "%s?page=%d" % (self .blog, page)

#这里可以用多线程改写一下 ,单线程太慢

self .fetchPage(url)

def main ():

user = ‘yourname‘       #你的百度登录名

psw  = ‘password‘  # 你的百度登陆密码 ,不输入用户名和密码,得不到私有的文章

blog = "http://hi.baidu.com/yourname " #你自己的百度博客链接

baidu = Baidu (user, psw,blog )

baidu.login ()

baidu.getTotalPage ()

baidu.dlownloadall ()

if __name__ == ‘__main__‘:

main()

来自为知笔记(Wiz)

时间: 2024-10-05 10:03:01

登录百度下载博客的相关文章

C#控制台基础 正则表达式,regex,webclient下载博客园网页中的一张图片

1 网页图 这网页就一张图片,新手入门,找个简单一些的. 2 代码 1 正则表达式,regex,webclient下载博客园网页中的一张图片 2 3 4 using System; 5 using System.Collections.Generic; 6 using System.IO; 7 using System.Linq; 8 using System.Net; 9 using System.Text; 10 using System.Text.RegularExpressions; 1

基于cookie的SSO单点登录系统 - waen - 博客园

原文:基于cookie的SSO单点登录系统 - waen - 博客园 利用数据库触发器实现定期自动增量更新缓存 原文地址:https://www.cnblogs.com/lonelyxmas/p/10434813.html

迁移之前百度空间博客09年到13年的文章

2009年开始记录自己的IT技术学习经历,一直放在百度空间.断断续续坚持到了2013年. 后来换了工作,同时百度空间关闭,自己也没有迁移数据到其他博客平台. 最近又想学点儿东西,想记录一下. 看来看去还是51CTO吧. 所以,第一步先把之前的数据手工迁移过来吧... 原文地址:http://blog.51cto.com/12738628/2065994

用IDM下载博客图片

前言 写博客的人一定都会有一个图床,将图片存在那里.发现自己以前没有注意图片来源问题,随手就贴在博客上面了.现在有不少图片都挂了,换句话来说有可能自己目前用的图床不提供服务了,那所有的图片都有可能丢失......所以打算写个脚本,把以前博客的图片保存下来,并在以后发博的时候注意保存本地图片.emmm,程序如下,主要是个人用脚本,所以很多地方就是图自己的方便.根据自己的情况写的: 代码 # -*- coding: utf-8 -*- import os import requests from b

百度CSND博客在搜索栏中显示图片

原先以为百度搜索结果有图片是能够人为控制的,结果发现并非这样. 近期百度搜索结果的每一个条目左側出现了小图片,这一变化能够说是极大满足了用户的体验,不用进入站点就提前直观的推断出站点内容是否是自己要找的.此举对于那些用非相关关键词.标题吸引用户点击的站点也起到了非常好地遏制作用.以下我就来说一下怎样才干让网页内的图片被百度抓取放到搜索页上. 点击打开链接 看完链接后就明确了.仅仅要将图片打下设置为120*75就能够显示了. 1)下载要改变格式的图片 如: 次图片的大小为192*220: 2)打开

Selenium+PhantomJS自动化登录爬取博客文章

selenium采集页面元素 phantomjs主要是模拟登录 也没多少说的,上代码吧 from selenium import webdriver import selenium.webdriver.support.ui as ui import time def crawl_cnblogs(blog_url,username,pwd): driver = webdriver.PhantomJS() driver.get("http://passport.cnblogs.com/user/si

百度CSND博客在搜索栏显示图片

这图片不会再百度栏显示. 通过这个按钮上传的图片是不会显示的,如: 只有通过下面的方法才可以显示,步骤如下: 1)在此处点选择文件,将你想要在百度搜索栏显示的图片上传. 2)选择图片,例如下面图片. 3)点击上传按钮 4)上传成功. 5) 百度搜索结果显示,如:

(转载)记:从百度空间搬家到博客园--写博客要写的舒服

转自http://www.cnblogs.com/syxchina/archive/2011/10/03/2198468.html 一直都有把百度空间搬家的想法,但由于百度空间我将就的用了快3年了,也写了很多文章,交了很多朋友,实在舍不得,但最近实在忍不住百度空间的限制,字数限制.无代码格式化.不支持windows live writer,每次写博客格式图片处理很是伤心,很多时候甚至不写博客,直接记录在doc文件来的方便省心!但想想平时很多只是汲取与互联网谷歌,不贡献点实在说不过去!下定决心,搬

博客园加密登录--jsencrypt

博客园加密登录--jsencrypt 问题由来    前几天在做项目的时候,发现一般做登录的时候只是一个非常简单的`form`表单,但是这样肯定是不安全的!所以想去看看其他比较流行的网站是怎么实现的.说到安全,我第一个想到的就是去看支付宝,毕竟人家那么大的系统并且管理的是money啊! 结果,支付宝的登录确实复杂,chrome的F12竟然找不到.算了,看看我大博客园吧! 下面就是从博客园登录页面copy下来的js登录代码片段 博客园登录时采用的ajax发信http登录请求,就是采用jsencyp