[3]Python学习笔记---写一个Python程序把CSDN专栏的所有文章另存为本地网页

原创 2017年07月25日 23:55:28

了解和学习了Python已经有一小段时间了,是应该写一个程序出来练练手了。 我们知道Python里面有很多的第三方库,而且也支持面向对象的编程思想。作为一个从事了Java编码工作快10年的程序员来说,应该不难理解和使用其面向对象的思想。下面就以把我的PowerShell DSC专栏里面所有的文章下载到本地为例子,看用Python如何简单。

代码如下,

import urllib.request
from bs4 import BeautifulSoup
import os
class CSDNSpecialTopic():
    def __init__(self,sepcialTopicIndexURLs=[],rootFolder="c:/test/"):
        self.sepcialTopicIndexURLs=sepcialTopicIndexURLs
        self.rootFolder=rootFolder

    def openURLAndSave(self):
        csdnList,csdnDic=self.getCSDNSpecialTopicPages()
        for title,tempPageURL in csdnDic.items():
            html = urllib.request.urlopen(tempPageURL)
            s=html.read()
            if not os.path.exists(self.rootFolder):
                os.mkdir(self.rootFolder)
            outfile = open(self.rootFolder+ "/"+ title+".html", "wb")
            outfile.write(s)
            outfile.close()

    def getCSDNSpecialTopicPages(self):
        csdnList = []
        csdnDic = {}
        for sepcialTopicIndexURL in self.sepcialTopicIndexURLs:
            f = urllib.request.urlopen(sepcialTopicIndexURL)
            htmlstr = f.read().decode('utf-8')
            soup = BeautifulSoup(htmlstr)
            h4s = soup.findAll('h4')
            for h4 in h4s:
                href = h4.a
                if href is not None:
                    if href.get("href") is not None:
                        csdnList.append(href.get("href"))
                        csdnDic[href.get_text()] = href.get("href")
        print(len(csdnList))
        print(len(csdnDic))
        print(csdnDic,sep='\n')
        return csdnList,csdnDic

sepcialTopicIndexURLs=["http://blog.csdn.net/column/details/14191.html","http://blog.csdn.net/column/details/14191.html?&page=2"];
csdnSpecialTopic=CSDNSpecialTopic(sepcialTopicIndexURLs,"c:/test3")
csdnList,csdnDic=csdnSpecialTopic.getCSDNSpecialTopicPages()
csdnSpecialTopic.openURLAndSave()

其中使用了urllib第三方库进行http的访问,使用bs4中的BeautifulSoup 类来进行HTML页面的解析。

先对urllib库做一个简单的描述。

  • 第一种是get请求    
方式一:urllib.request.urlopen(url)    
方式二:先创建一个urllib.request.Request对象,然后将对象放入urlopen中。urllib.request.urlopen(Request对象)

  • 第二种是POST:

携带数据过去    比如:登录用户名,密码    先创建一个urllib.request.Request    
将请求数据放到Request对象中urllib.request.Request(url,data)    
注意:在此之前先将data进行转化:       
data = urllib.parse.urlencode(values)

  • 第三种是:添加请求头

比如:headers = {'User-Agent':user_agent} 然后把headers放到Request方法的第三个参数

urllib.request.Request(url, data.encode("utf-8"), headers)


下面是从网上找的一个简单的例子。

import urllib.parse
import urllib.request


url = "http://www.baidu.com"
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
values = {'name' : 'Michael Foord',
          'location' : 'Northampton',
          'language' : 'Python'}
headers = {'User-Agent':user_agent}


data = urllib.parse.urlencode(values)
req = urllib.request.Request(url, data.encode("utf-8"), headers)
response = urllib.request.urlopen(req)
the_page = response.read().decode("utf-8")
print(the_page)


基础讲完了,下面到具体的例子,CSDNSpecialTopic是我定义的一个类,里面提供了访问网页,解析网页和把网页另存为的功能。其接受两个参数:一个数组,专栏的URL地址,可以有多个;另外一个就是网页文件需要存放的目录,如果当前没有这个目录,就创建一个新的目录。这两个参数是通过其构造函数:

def __init__(self,sepcialTopicIndexURLs=[],rootFolder="c:/test/"):
传入进来的,默认的路径是c:/test文件夹。

下面是运行的结果,其很好的支持中文。





版权声明:本文为博主原创文章,未经博主允许不得转载。

CSDN使用:如何在CSDN中创建自己的博客专栏

算起来注册时间,本人也算是CSDN的老用户了,但是对于一些CSDN的功能还是全部都知道和了解,今天我分享一下在CSDN中如何创建自己的博客专栏,博客专栏顾名思义,它的作用就是让你把某一方面的知识或者技...
  • CC1991_
  • CC1991_
  • 2017年07月27日 10:44
  • 924

在CSDN开通博客专栏后如何发布文章及改进建议(图文)

在CSDN写博客已经有一段时间了,看到很多朋友的博客上有个博客专栏的图标,昨天也申请了一下并且通过了审核。接下来怎么在博客专栏下发文章呢?一开始找了半天也没找到门道,搜索也没有相关的结果,最终找到了发...
  • upi2u
  • upi2u
  • 2015年01月15日 13:41
  • 8394

从零开始人工智能(一)——飞速看尽Python基础

Python是一种简单主义至上的语言。说PHP是世界上最好的语言,这完全是一个梗。但是说Python是世上最好的语言,想必应者甚多。阅读良好的Python代码放佛如同阅读英语一般简单,它免费、易学、可...
  • xuxumanzou
  • xuxumanzou
  • 2017年03月22日 09:59
  • 11205

Python3 基础学习笔记

Python3 基础学习笔记这篇博客不是完整的python教程,只是我在学习python3时记下的一些容易忘记的或比较重要的知识点,里面的代码大多是转自 廖雪峰的python3教程 和 菜鸟教程 。不...
  • Cyiano
  • Cyiano
  • 2017年04月10日 19:58
  • 749

在CSDN开通博客专栏后如何发布文章(图文)

今天打开电脑登上CSDN发现自己授予了专栏勋章,有必要了解如何在专栏发布文章。 很感谢已经有前辈给出了图文教程,此文章转载自博客:http://blog.csdn.net/upi2u/article...
  • qq_32059827
  • qq_32059827
  • 2016年05月30日 19:59
  • 1222

Python 学习笔记之一——Python简介

Python学习一 (Python简介)
  • Jeff_Liu_Sky
  • Jeff_Liu_Sky
  • 2016年08月01日 16:15
  • 1056

使用flask框架实现一个简单的网页加法运算器

1. 前言最近在看Python web 开发的一些内容, 正好看到了flask, 这里做一些记录2. flask框架简要说明 flask 是一个微型的web框架, 相比于 Django 集成了各种模块...
  • zhyh1435589631
  • zhyh1435589631
  • 2016年05月29日 15:55
  • 1921

Python实战1_1:做一个自己的网页

参加了Python实战课程,此为第一节课的练习总结成果HTML代码 The Blah ...
  • yejing0609
  • yejing0609
  • 2016年06月22日 14:01
  • 8202

Python学习第四篇:利用python抓取英语单词

利用python爬取英语单词和释义。
  • Xunxianren007
  • Xunxianren007
  • 2017年05月06日 19:26
  • 984

python学习—几个简单小程序

python初阶学习
  • lcr_happy
  • lcr_happy
  • 2016年12月28日 13:41
  • 12018
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[3]Python学习笔记---写一个Python程序把CSDN专栏的所有文章另存为本地网页
举报原因:
原因补充:

(最多只允许输入30个字)