Python爬虫入门实例一之爬取中国大学排名修正(2020版)

Python爬虫入门实例一之爬取中国大学排名(2020版)

写在前面

学习嵩天老师爬虫基础课后,第一次编写的爬虫实例,因为那个大学排名网的网页代码变了,所以老师的源代码包括我在网上查的好多同学代码都不适用,排查良久,问题区间缩小到网页标签节点上。
望后来者鉴之。

1.问题

      <td>    1                               <!---->    </td>
      <td>   <a> 清华大学</a>   <p>   </p>   <!---->     </td>
      <td>   北京                             <!---->    </td>
      <td>   综合                             <!---->    </td>
      <td>   852.5                            <!---->    </td>
      <td>   38.2                                        </td>
</tr>

问题就在于多该网页代码的某些td标签里多了空注释标签。相当于多了一个节点,还有就是最后的td标签里面的元素多了些空格换行,这就为难到我胖虎了,哼,不虚。

2.解决锚点

1.需要加一层索引
2.字符串.strip()

3.修改说明

1.获取大学信息;
2.

3.原码


 1. # 爬取由上海交通大学开发的最好大学网  http://www.zuihaodaxue.cn/
    # 中国大学排名网页  http://www.zuihaodaxue.cn/zuihaodaxuepaiming2018.html   import requests from bs4 import BeautifulSoup import bs4
        def getHTMLText(url):
        try:
            r = requests.get(url,timeoout=30)
            r.raise_for_status()
            r.encoding = r.apparent_encoding
            return r.text
        except:
            return ""
        def fillUnivList(ulist,html):
        soup = BeautifulSoup(html,'html.parser')
        for tr in soup.find('tbody').children:
            if isinstance(tr,bs4.element.Tag):  
    
    tds = tr('td')
                ulist.append([tds[0].string,tds[1].string,tds[2].string])   def
    printUnivList(ulist,num):
        tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}"
        print(tplt.format("排名","学校名称","总分",chr(12288)))
        for i in range(num):
            u = ulist[i]
            print(tplt.format(u[0],u[1],u[2],chr(12288)))   def main():
        uinfo = []
        url = 'http://www.zuihaodaxue.cn/zuihaodaxuepaiming2018.html'
        html = getHTMLText(url)
        fillUnivList(uinfo,html)
        printUnivList(uinfo,20)  #20 表示取前20所大学 main()

4.改码

好大学网部分网址代码(简化)

<tr>
          <td>    1                               <!---->    </td>
          <td>   <a> 清华大学</a>   <p>   </p>   <!---->     </td>
          <td>   北京                             <!---->    </td>
          <td>   综合                             <!---->    </td>
          <td>   852.5                            <!---->    </td>
          <td>   38.2                                        </td>
    </tr>

 1. # 爬取由上海交通大学开发的最好大学网  http://www.zuihaodaxue.cn/
    # 中国大学排名网页  https://www.shanghairanking.cn/rankings/bcur/2020   import requests from bs4 import BeautifulSoup import bs4
        def 网站文本(url):#模块化思想,值得学习
        try:
            r = requests.get(url)
            r.raise_for_status()
            r.encoding = r.apparent_encoding
            return r.text
        except:
            return ""
    
    def 获取大学信息(ulist,r_text):
        soup = BeautifulSoup(r_text,'lxml')#lxml解析器,不错
        s=soup.find('tbody').contents
        for 元素 in s:
            if isinstance(元素,bs4.element.Tag):
                六个td标签 = 元素('td')
                ulist.append([六个td标签[0].contents[0].string,六个td标签[1].contents[0].string,六个td标签[4].contents[0].string])
    def 打印大学信息(ulist,num):
        tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}"
        print(tplt.format("排名","学校名称","总分",chr(12288)))
        for i in range(num):
            u = ulist[i]
            print(tplt.format(u[0].strip(),u[1],u[2].strip(),chr(12288)))   def
    main():
        x = []
        url = 'https://www.shanghairanking.cn/rankings/bcur/2020'
        html = 网站文本(url)
        获取大学信息(x,html)
        打印大学信息(x,20)  #20 表示取前20所大学 main()

5.图

图片: 在这里插入图片描述

代码图
在这里插入图片描述

6.小诗一首,贴上

雨息
时,20201117日,克一难题,兴起 ,恰雨天 ,恰天暮,作之。
道法三千年,呈平恨离天。
去滋琢未影,万物果犹然。
总结 :万物本为常,奈何多瑕思。
大道至简,然简由繁来,多生变化,循迹景吾,自,攻无不克。(第无数次犯错。吐槽)
纪念之…

生活愉快!

  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值