爬取中国最好大学网时出现的问题
import requestsfrom 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'),应该怎么修改? try-except AttributeError pass 试试看? soup.find('tbody')这个拿到了空对象None,所以说没有children属性。
我看页面没有tbody这个分支,你是想爬什么数据? suchocolate 发表于 2021-4-1 10:37
soup.find('tbody')这个拿到了空对象None,所以说没有children属性。
我看页面没有tbody这个分支,你是想 ...
爬取中国最好大学的排名 suchocolate 发表于 2021-4-1 10:37
soup.find('tbody')这个拿到了空对象None,所以说没有children属性。
我看页面没有tbody这个分支,你是想 ...
像这样 傲视群熊¥ 发表于 2021-4-1 11:02
像这样
有多个类型的榜单,你爬的是哪一个? 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]