zoukankan      html  css  js  c++  java
  • application:bs4+requests对网页数据进行解析

    逻辑过程:

    1.通过requests对网页进行爬取,返回网页html

    2.通过bs4对网页数据进行解析,返回列表数据

    3.格式化输出数据

    函数式编程:

    定义获取html数据函数,判断响应情况,返回网页resopense.text

    定义解析函数:通过对数据函数返回内容进行解析,返回解析后的数据

    定义展示函数:打印输出函数

    定义运行函数:调用其他函数进行运行

    亮点:

    将所有数据解析放入一个列表中,在展示时,通过设定长度遍历解析数据所在列表,进行控制读取数据

    问题及相关需要注意点:

    soup.find('标签名').children:需要注意这里是否成功get了网页text,未成功可能会报错

    soup.标签.string:当标签中有多个子标签时,会返回None,使用soup.标签.text;也可以find对应子标签然后获得string

    https://blog.csdn.net/lin252931/article/details/105403723

    string依旧存在问题,可能打印出来不能完全对齐,暂未找到解决方式

    python代码实现:

    由于本地不好使用爬虫,因此通过open读取网页的形式进行爬取

    #中国大学排名定向爬虫
    import requests
    from bs4 import BeautifulSoup
    import bs4
    def getHtmltext(url):
        try:
            res=requests.get(url,timeout=30)
            res.raise_for_status()
            r.encoding=r.apparent_encoding
            return r.text
        except:
            return " "
    def open_html(name):
        with open(name,'rb')as f:
            html=f.read()
        
        return html
    
    def fillUnivList(urlist,html):
        #提取数据
        soup=BeautifulSoup(html,'html.parser')
        for tr  in soup.tbody.children:
            #获取tbody标签所有子节点tr标签
            if isinstance(tr,bs4.element.Tag):
                #判断获得所有满足条件的标签
                
                tds=tr('td')
                
                #快速获取tr标签中的所有tds标签
                urlist.append([tds[0].string,tds[1].text,tds[2].text])
            

          
        
        cont=tds[1].find('a')
        # 快速获取tr标签中的所有tds标签
        urlist.append([tds[0].string.replace(' ', '').replace(' ', ''),cont.string.replace(' ', '').replace(' ', ''), tds[2].string.replace(' ', '').replace(' ', '')])

    #格式化输出比较常用print函数的formate格式化字符串 def printUnivlist(urlist,num): print("{0} {1} {2}".format('排名','学校','地区')) for i in range(num): u=urlist[i] print("{0} {1} {2}".format(u[0],u[1],u[2])) def main(): uinfo=[] #url='view-source:http://www.shanghairanking.cn/rankings/bcur/2020' #html=getHtmltext(url) html=open_html('大学排名.html') fillUnivList(uinfo,html) printUnivlist(uinfo,20)#20 univs main()

  • 相关阅读:
    开源项目中标准文件命名和实践
    linux远程拷贝命令-scp
    Linux访问Windows共享目录的方法——smbclient
    ADB Fix error : insufficient permissions for device
    APT典型应用示例
    我的参考书籍列表
    GCC Reference
    GNU make简介
    Windows下搭建Android NDK开发环境及命令行编译
    Git命令行基本操作
  • 原文地址:https://www.cnblogs.com/yescarf/p/13808246.html
Copyright © 2011-2022 走看看