用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)