• 爬虫--慕课爬取大学排名的程序


    本文采取的路线是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)))

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

  • 相关阅读:
    jQuery事件对象event的属性和方法
    使用CSS3动画库animate.css
    Git常用命令整理
    模拟现实物理效果
    数组排序之选择排序
    数组排序之冒泡排序
    小方块靠着浏览器运动
    轮播图片, 不用滚动视图, 也不用时间计时器
    UIActionSheet
    自动计算高度的方法 iOS, height为0, 可以自动计算weith,
  • 原文地址:https://www.cnblogs.com/tianqianlan/p/9439709.html
Copyright © 2020-2023  润新知