zoukankan      html  css  js  c++  java
  • 用python将博客园的文章爬取到本地

    用python将博客园上的文章加载到本地。(不完全版)

    可以将指定站点的文章全都下载到本地, 但是只能加载文章, 图片什么的我还没有搞好, 搞的时候遇到各种各样的问题。 比如一个p标签之间有几个img标签什么的, 不知道怎么搞, 用正则匹配出来也有各种问题, 然后我就把图片的部分删掉了..

    文件命名我是用的博客文章的标题名, 一开始也有各种问题, 因为文件和文件夹里是不能包含:?|/<>*的, 所以我把这些符号全都去除掉了。

    还用了docx这个库, 可以直接生成word文件。
    安装的话命令行里输出pip install docx 就可以了

    还有我的爬取的时候必须要知道博客一共有多少页, 如果不知道页数的情况我也不知道怎么搞, orz太弱了

    from bs4 import BeautifulSoup
    import requests
    from docx import Document
    import urllib.request
    import re
    
    baseUrl = 'http://www.cnblogs.com/yohaha/default.html?page='
    urls = []
    def getText(url):
        document = Document()
        wb_data = requests.get(url)
        soup = BeautifulSoup(wb_data.text, 'lxml')
        title = soup.select('#cb_post_title_url')[0].get_text()
        title = str(title)
        replace = re.compile(r'[?/<>*|:]')
        title = re.sub(replace , ' ', title)
        content = soup.select('#cnblogs_post_body')
        text = re.compile(r'[(<hd?>.+</hd?>)(<p>.+</p>)(<span>.+</span>)]')
        for i in content:
            if re.search(text, str(i)) :
                tmp = i.get_text()
                document.add_paragraph(i.get_text())
        document.save('G:/新建文件夹/'+title+'.docx')
    
    def getUrls(url):
        wb_data = requests.get(url)
        soup = BeautifulSoup(wb_data.text, 'lxml')
        for url in soup.select('#main .post h2 a'):
           urls.append(url.get('href'))
    
    for i in range(1, 28):
        url = baseUrl + str(i)
        getUrls(url)
    
    for url in urls:
        getText(url)
    
  • 相关阅读:
    lseek 与 ioctl
    perror表
    阻塞&&非阻塞
    linux read/write
    文件i/o函数 open/close
    linux 文件io
    linux下的静态库和共享库
    linux基本命令
    c++ 2.1 编译器何时创建默认构造函数
    Java学习笔记34(sql基础 :增删改查1)
  • 原文地址:https://www.cnblogs.com/yohaha/p/5432812.html
Copyright © 2011-2022 走看看