前言
人生苦短,我用python【2018.6.17】
感觉练习也写的差不多了,近期正好想对自己的blog做一个备份,因此写了一个爬取csdn博客的py。
要求
根据blog的网址,爬取所有的原创文章。
参考链接:https://blog.csdn.net/qq_33438733
简要分析
获取该博客存在几个页面
获取每个页面中的文章链接
获取文章并保存到本地
代码
@log
def get_blog_urls(pages):
blog_urls = []
for page in pages:
content = request.urlopen(page)
soup = BeautifulSoup(content, 'lxml')
div_list = (soup.find_all('h4', {'class': 'text-truncate'}))
for div in div_list:
url = div.a['href']
blog_urls.append(url)
return blog_urls
@log
def get_blog2md(url):
content = request.urlopen(url)
soup = BeautifulSoup(content, 'lxml')
blog_name = soup.find('h1', {'class': 'title-article'}).get_text()
blog_name = re.sub(r'/', '-', blog_name)
file_name = os.path.join('./MyBlog', blog_name + '.html')
blog_content = soup.find('div', {"class": "blog-content-box"}).prettify() # get html
with open(file_name, 'w') as f:
f.write(blog_content)
f.flush()
logging.info("%s write done!" % (file_name))
@log
def get_pages(myblog):
page_list = []
for i in range(1, 10):
myblog_ = myblog + str(i) + '?t=1'
content = request.urlopen(myblog_)
soup = BeautifulSoup(content, 'lxml')
_not_page = (
soup.find('div', {'class': 'no-data d-flex flex-column justify-content-center align-items-center'}))
if _not_page is not None:
break
else:
page_list.append(myblog_)
return page_list
所有代码均已上传github
总结
学习了bs4,urllib,os,functools等模块。
讲真,自己的编码能力真是不行,就这么几行代码,写了将近一个上午。惭愧,主要是调试太慢。