【手摸手学ModelArts】AI小白的第一行爬虫代码献给华为云博客

胡琦 发表于 2020/06/10 18:21:13 2020/06/10
【摘要】 快来瞧瞧,Copy攻城狮分享了一个快速获取华为云博客文章及链接的祖传秘方!

本文是纯代码篇,不会涉及任何理论,翔一样的代码,求大佬指导鞭策!

首先一个需求来了,【2020华为AI训练营】要我们提交个人的博客标题和链接,作为懒人的我,不想一个一个去copy,于是想到了爬虫。首先声明一下,我没有Python基础,从代码中就能看出来,不过干了4年前端,对页面的结构还算了解,通过查找一些代码,终于花了3个小时,完成了这个残次品。代码仅供学习用,请勿触碰红线。也请各位大佬多多指教!

# 引入网络请求库
from urllib import request
# 引入base4库
import base64
# 导入html解析库并取别名为bs
from bs4 import BeautifulSoup as bs

class HuaweiCloud:
    '获取某个人的华为云博客文章'
    # 用户搜索入口
    baseUrl = 'https://huaweicloud.com'
    # 博客列表入口
    url = ''
    # 文章列表
    allArticle = ''
    # 标志位,0-搜索用户,1-搜索文章
    flag = 0
    def __init__(self, name):
        self.name = name
        print(name)

    # 转码
    def encode(self):
        encoded = base64.b64encode(('%'+self.name+'%').encode())
        encoded = str(encoded,encoding = "utf-8")
        print(encoded)
        return encoded

    # 搜索
    def doSearch(self):
        # 首先执行用户搜索,获取用户ID(博客用户)
        if self.flag == 0:
            self.url = self.baseUrl + '/s/' + self.encode()

        # 添加UA标识讲这个爬虫程序伪装成浏览器访问
        user_agent = "User-Agent"
        user_agent_value = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36"
        print(self.url)
        # 发起网络请求,获取到返回的html
        resp = request.Request(self.url)
        # 模拟浏览器
        resp.add_header(user_agent, user_agent_value)
        resp = request.urlopen(resp)
        # 网页返回的数据
        htmlCode = resp.read().decode("utf-8")
        # print(htmlCode)

        # 格式化html(htmlCode就是上面我们请求到的数据)
        soup = bs(htmlCode, "html.parser")
        # 输出格式化好的html内容
        # print(soup.prettify())

        # 这是第一步,在主站搜索用户,默认取的第一个
        if self.flag == 0:
            userList = soup.find_all("li", {"class", "user-classify"})
            user= userList[0].find_all("a")
            # 取第一个用户的博客地址
            self.url = user[0].get("href")
            print(user[0].get("href"))
            # 执行第二步
            self.flag = 1
            self.doSearch()

        # 第二步获取文章
        if self.flag == 1:
            blogList = soup.find_all("a", {"class", "common-blog-title"})
            print(blogList)
            for article in blogList:
                url = article.get("href")
                title= article.get("title")
                if url and title:
                    testUrl = 'https://bbs.huaweicloud.com'+url
                    article = title + testUrl
                    self.allArticle += article +'\n'    
            print(self.allArticle)
            return(self.allArticle)

t = HuaweiCloud('胡琦')
t.doSearch()

如果ModelArts的notebook中没有beautifulsoup4这个依赖,可手动安装:

!pip install beautifulsoup4

结果预览

胡琦.png


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。