写点python代码实现下载百度空间文章(附源码)
纯python新手写的关于下载百度空间文章python源码,代码写的不好,能用不能看。大家看看效果就行, 不要求代码的精简程度。大牛请飘过。
下载百度空间文章python源码使用方法:
在cmd中输入:> python "F:WalkboxPythonmyworkaidugetArticleId - r1.py" bspeng922 6
命令格式:python 文件存放路径 [用户名] [下载页数]
下载页数可以不填,不填则为全部下载。如果大于实际总页数,则会重复下载第一页的内容
这段代码只能是新版的百度空间,只测试了”低调优雅“模板,生成的是html文件;
同时我突然发现一个奇特的功能,这段代码竟然可以用来刷百度空间的访问量,不错哦。
在这里还是要推荐下我自己建的Python开发学习群:483546416,群里都是学Python开发的,如果你正在学习Python ,小编欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2018最新的Python进阶资料和高级开发教程,欢迎进阶中和进想深入Python的小伙伴
下载百度空间文章python源码,如下:
# -*- coding: utf8 -*-
import urllib
import re,os,sys,time
def articleDownload(username,pageCount):
#判断传入的参数是否合法
if username == "" : username = "bspeng922"
if pageCount == "" or int(pageCount)<0 :
pageCount = 0
else:
pageCount = int(pageCount) + 1
print "Blog: http://hi.baidu.com/new/%s"%username
#文件保存目录,可修改
saveDrive = "E:\test" #directory to save html files
#html文件保存目录
if not os.path.exists(saveDrive) :
os.mkdir(saveDrive)
mydrive = os.path.join(saveDrive,username)
if not os.path.exists(mydrive) :
os.mkdir(mydrive)
#图片保存目录
imgDir = "img"
imgPath = os.path.join(saveDrive,username,imgDir)
if not os.path.exists(imgPath):
os.mkdir(imgPath)
#判断传入的页数是否为0,为0则全部下载
if pageCount == 0 :
fstbaidu = urllib.urlopen("http://hi.baidu.com/new/%s"%username)
totalRecord,pagesize=0,0
for fstline in fstbaidu:
if fstline.find("allCount")>0: #only one tag
totalRecord = int(fstline[fstline.index("'")+1:fstline.rindex("'")])
if fstline.find("pageSize")>0:
pagesize = int(fstline[fstline.index("'")+1:fstline.rindex("'")])
if pagesize != 0 and totalRecord != 0:
pageCount = totalRecord/pagesize
if totalRecord / float(pagesize) > totalRecord/pagesize:
pageCount = pageCount + 2
fstbaidu.close()
print "Page Count: ",pageCount - 1
#根据文章ID获得文章实际链接
articleCount = 0
sumHtmlPath = os.path.join(saveDrive,"%s.html"%username)
sumfile = open(sumHtmlPath,"w") #the sum file
aTagCmp = re.compile("""(.*?)"""%username)
for page in range(1,pageCount):
thisPageUrl = urllib.urlopen("http://hi.baidu.com/new/%s?page=%d"%(username,page))
print "Page: ",page
for line in thisPageUrl:
if line.find("a-incontent a-title")>0 :
articleCount += 1 #博客文章数目
linefind = aTagCmp.findall(line)
#print linefind
for line in linefind :
#文章的ID和名称
myurl = line[0]
mytitle = line[1]
sumfile.write("""%s
"""%(username,myurl,mytitle))
#获得真实的文章,并保存
thispath = os.path.join(mydrive,"%s.html"%myurl)
thisfile = open(thispath,'w')
thisArticle = urllib.urlopen("http://hi.baidu.com/%s/item/%s"%(username,myurl))
for thisline in thisArticle:
imgCount = 0
badImg = 0
if thisline.find("content-head clearfix")>0: #只取正文
#匹配图片标签
imgTagCmp = re.compile("""""")
imglist = imgTagCmp.findall(thisline)
for imglink in imglist :
imageNewPath = ""
#print imglink
if imglink.find("""://""")>0:
imageName = imglink[imglink.rindex("/")+1:]
#下载图片
try:
urllib.urlretrieve(imglink,os.path.join(imgPath,imageName))
imgCount += 1
except : #不能下载则报错
print "cannot download this image: "+imageName
#替换图片链接
#print imageNewPath
try:
#print thisImgCmp.findall(thisline)
thisline = thisImgCmp.sub(imageNewPath,thisline) #每次都对当前图片标签进行替换
#print thisline
except:
print "UnExpect error"
else:#www.iplaypy.com
badImg += 1
#删除多余的内容
pos = thisline.find("mod-post-info clearfix")
if pos>0 :
thisline = thisline[0:pos-12]
thisfile.write(thisline.strip())
thisfile.close()
thisArticle.close()
#print "Image Count: %d Bad Image: %d"%(imgCount, badImg)
thisPageUrl.close()
sumfile.close()
print "Article Count: ",articleCount
if __name__ == "__main__":
st = time.time()
#获得命令行参数
if len(sys.argv) == 2:
uname = sys.argv[1]
pages = 0
elif len(sys.argv)>2:
uname = sys.argv[1]
pages = int(sys.argv[2])+1
else:
uname = raw_input("Username -> ")
pages = raw_input("Page -> ")
articleDownload(uname,pages)
et = time.time()
print "Time used: %0.2fs"%(et-st)