zoukankan      html  css  js  c++  java
  • 爬虫--慕课爬取大学排名的程序

    本文采取的路线是requests-bs4库:

    我们学会分析,这张图找到,标签<td>..<td>

     1 import requests
     2 from bs4 import BeautifulSoup
     3 import bs4
     4 
     5 def getHTMLText(url):
     6     try:
     7         r = requests.get(url)
     8         r.raise_for_status()
     9         r.encoding = r.apparent_encoding
    10         return r.text
    11     except:
    12         return "产生异常"
    13 
    14 def fillUnivList(ulist, html):
    15     soup = BeautifulSoup(html, "html.parser")
    16     for tr in soup.find("tbody").children:
    17         #检测tr标签,是否为bs4.element.Tag定义的类型
    18         if isinstance(tr, bs4.element.Tag):
    19             tds = tr("td")#查询td标签
    20             ulist.append([tds[0].string, tds[1].string, tds[3].string])#添加二维列表
    21 
    22 def printUnivList(ulist, num):
    23     print("{:^10}	{:^6}	{:^10}".format("排名","学校名称","总分"))
    24     for i in range(num):
    25         u = ulist[i]
    26         print("{:^10}	{:^10}	{:^12}".format(u[0], u[1], u[2]))
    27 
    28 def main():
    29     uinfo = []
    30     url = "http://www.zuihaodaxue.com/zuihaodaxuepaiming2018.html"
    31     html = getHTMLText(url)
    32     fillUnivList(uinfo, html)
    33     printUnivList(uinfo, 20)
    34 
    35 main()

    此时我们可以看到,打印出的结果,对齐的效果,并没有预想的好,以下是原因。

     

    此时将代码改为

    1 def printUnivList(ulist, num):
    2     tplt = "{0:^10}	{1:{3}^10}	{2:^10}"#{1:{3}^10},这个里面1和3对应format里面的顺序,而“:” 后面的内容表示填充内容,当长度不够时将自动填充,数字0,1,2必不可少
    3     print(tplt.format("排名","学校名称","总分",chr(12288)))
    4     for i in range(num):
    5         u = ulist[i]
    6         print(tplt.format(u[0], u[1], u[2], chr(12288)))

    现在看起来好多了,中英文编码问题,很常见,可以这种方式解决。

  • 相关阅读:
    新加坡
    android alt + /
    豌豆荚开源技术
    有意思的
    android view
    localstorage性能
    Android WebView使用基础
    关于hash
    Android 近百个项目的源代码,覆盖Android开发的每个领域
    10个经典的Android开源项目(附源码包)
  • 原文地址:https://www.cnblogs.com/tianqianlan/p/9439709.html
Copyright © 2011-2022 走看看