菜鸟学习~(第八期):爬虫基础(三),Beautiful Sou

作者: KangSmit的算法那些事儿 | 来源:发表于2019-10-03 22:43 被阅读0次

    1、Beautiful Soup 是什么?

    Beautiful Soup 是一个可以从 HTML 或 XML 文件中提取数据的 Python 库。

    2、有什么作用?

    文档导航,查找,修改文档的方式,主要应用在网页抓取数据方面,
    官方解释如下:
    Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。

    Beautiful Soup++自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码++。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。

    Beautiful Soup已成为和lxml、html6lib一样出色的python解释器,为用户灵活地提供不同的解析策略或强劲的速度。

    3、安装BetautifulSoup4

    切换到Python的Scripts目录下
    打开命令行窗口(CMD) -> 输入 pip install BeautifulSoup4 命令)

    类似地,
    win7系统下安装命令(Python3.4.3以前的版本):
    python -m pip install BetautifulSoup4
    由于Python3.7.4已经自带了BetautifulSoup4库,所以你在安装的时候回出现这种情况,不过以前的版本如Python3.4.3是没有这个库的,所以还在使用这个版本的同学请自行安装BetautifulSoup4。

    4、爬百度百科“AI”的词条

    编写一个爬虫,爬百度百科“AI”的词条,源码如下:

    import urllib.request#先使用urllib.request模块从指定网址上读取HTML文件
    import re #这里使用了正则表达式,我会在后期介绍着部分内容
    from bs4 import BeautifulSoup
     
    def main():
        url = "https://baike.baidu.com/item/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/9180?fromtitle=AI&fromid=25417"
        response = urllib.request.urlopen(url)
        html = response.read()
        soup = BeautifulSoup(html, "html.parser") # 使用 Python 默认的解析器
        
        for each in soup.find_all(href=re.compile("view")):
            #使用for迭代读取
            print(each.text, "->", ''.join(["http://baike.baidu.com", each["href"]]))
            # 上边用 join() 不用 + 直接拼接,是因为 join() 被证明执行效率要高很多
     
    if __name__ == "__main__":
        main()
    
    

    执行结果,将所有包含“view”的链接按下边格式打印出来


    说明一下if __name__ == '__main__':的作用:
    防止在被其他文件导入时显示多余的程序主体部分.

    每日三道题, 笔试面试不吃亏:

    题目1(排列组合):有四个数字:1、2、3、4,5,能组成多少个互不相同且无重复数字的四位数?各是多少?

    程序分析:可填在百位、十位、个位的数字都是1、2、3、4,5。组成所有的排列后再去 掉不满足条件的排列。

    for i in range(1,6):#1到5的整数,这四位数设为i,j,k,m
        for j in range(1,6):
            for k in range(1,6):
                for m in range(1,6):
                    if( i != k ) and (i != j) and(i != m) and (j != k) and (j != m) and (k != m):
                                 print (i,j,k,end = "||" )
    

    运行结果

    题目2:企业发放的奖金根据利润提成:

    (1)
    利润低于或等于10万元时,奖金可提10%;
    (2)
    利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;
    (3)
    20万到40万之间时,高于20万元的部分,可提成5%;
    (4)
    40万到60万之间时高于40万元的部分,可提成3%;
    (5)
    60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,

    从键盘输入当月利润I,求应发放奖金总数?

    程序分析:请利用数轴或区间来分界,定位。注意定义时需把奖金定义成长整型。

    i = int(input('净利润:'))
    arr = [1000000,600000,400000,200000,100000,0]
    #超过的部分
    rat = [0.01,0.015,0.03,0.05,0.075,0.1]
    r = 0
    for idx in range(0,6):
        if i > arr[idx]:
            r += (i-arr[idx]) * rat[idx]
            print ((i-arr[idx]) * rat[idx])
            i = arr[idx]
    print("应发放奖金总数为:",r)
    

    运行结果

    当然,可以使用if-elif-else语句来解决,具体自己下去练习。

    题目3:一个整数,它加上100后是一个完全平方数,再加上256又是一个完全平方数,请问该数是多少?

    数学解释:
    程序分析:假设该数为 x。
    (1)、则:x + 100 = n^2, x + 100 + 256 = m^2

    (2)、计算等式:m^2 - n^2 = (m + n)(m - n) = 256

    (3)、假设: m + n = i,m - n = j,i * j =256,i 和 j 至少一个是偶数

    (4)、解3中的二元方程可得: m = (i + j) / 2, n = (i - j) / 2,i 和 j 要么都是偶数,要么都是奇数。

    (5)、从 3 和 4 推导可知道,i 与 j 均是大于等于 2 的偶数。

    (6)、由于 i * j = 256, j>=2,则 1 < i < 256 / 2 + 1=129。

    接下来将 i 的所有数字循环计算即可。

    程序源代码:

    #b = 256/2+1
    b = 129
    for i in range(1,b):
        if 256 % i == 0:
            j = 256 / i;
            if  i > j and (i + j) % 2 == 0 and (i - j) % 2 == 0 :
                m = (i + j) / 2
                n = (i - j) / 2
                x = n * n - 100
                print("n=",n)
                print("m=",m)
                print("所求的数为:",x)
    
    

    运行结果

    相关文章

      网友评论

        本文标题:菜鸟学习~(第八期):爬虫基础(三),Beautiful Sou

        本文链接:https://www.haomeiwen.com/subject/rfsuuctx.html