傲视群熊¥ 发表于 2021-3-31 22:42:20

爬取中国最好大学网时出现的问题

import requests
from bs4 import BeautifulSoup
import bs4



def getHTMLText(url):
    try:
      r=requests.get(url,timeout=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(.string,tds.string,tds.string])


def printUnivList(ulist,num):
    print("{:^10}\t{:^6}\t{:^10}".format("排名","学校名称","分数"))
    for i in range(num):
      u=ulist
      print("{:^10}\t{:^6}\t{:^10}".format(u,u,u))


def main():
    uinfo=[]
    url="http://www.zuihaodaxue.cn/zuihaodaxuepaiming2019.html"
    html=getHTMLText(url)
    fillUnivList(uinfo,html)
    printUnivList(uinfo,20)
if __name__=='__main__':
    main()
代码如上
为什么编译器会给我一个错误(AttributeError: 'NoneType' object has no attribute 'children'),应该怎么修改?

Daniel_Zhang 发表于 2021-4-1 02:43:02

try-except AttributeError pass 试试看?

suchocolate 发表于 2021-4-1 10:37:43

soup.find('tbody')这个拿到了空对象None,所以说没有children属性。
我看页面没有tbody这个分支,你是想爬什么数据?

傲视群熊¥ 发表于 2021-4-1 10:59:00

suchocolate 发表于 2021-4-1 10:37
soup.find('tbody')这个拿到了空对象None,所以说没有children属性。
我看页面没有tbody这个分支,你是想 ...

爬取中国最好大学的排名

傲视群熊¥ 发表于 2021-4-1 11:02:49

suchocolate 发表于 2021-4-1 10:37
soup.find('tbody')这个拿到了空对象None,所以说没有children属性。
我看页面没有tbody这个分支,你是想 ...

像这样

suchocolate 发表于 2021-4-1 11:07:37

傲视群熊¥ 发表于 2021-4-1 11:02
像这样

有多个类型的榜单,你爬的是哪一个?

逃兵 发表于 2021-4-1 11:07:54

2019年数据
如果爬2020的话,url最后改成202011

import requests
from bs4 import BeautifulSoup
import bs4



def getHTMLText(url):
    try:
      r=requests.get(url,timeout=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(.text)),tds.find('a').text,str(float(tds.text))])


def printUnivList(ulist,num):
    print("{:^10}\t{:^6}\t{:^10}".format("排名","学校名称","分数"))
    for i in range(num):
      u=ulist
      print("{:^10}\t{:^6}\t{:^10}".format(u,u,u))

def main():
    uinfo=[]
    url="https://www.shanghairanking.cn/rankings/bcur/201911"
    html=getHTMLText(url)
    fillUnivList(uinfo,html)
    printUnivList(uinfo,20)
   
if __name__=='__main__':
    main()


页: [1]
查看完整版本: 爬取中国最好大学网时出现的问题