用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)
原文地址:https://www.cnblogs.com/yohaha/p/5432812.html