Python每日一练

前言

人生苦短,我用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等模块。
讲真,自己的编码能力真是不行,就这么几行代码,写了将近一个上午。惭愧,主要是调试太慢。

猜你喜欢

转载自blog.csdn.net/qq_33438733/article/details/80718312