鱼C论坛

 找回密码
 立即注册
查看: 1531|回复: 9

[已解决]求助

[复制链接]
发表于 2018-1-9 16:37:12 | 显示全部楼层 |阅读模式
50鱼币
环境win64位py3.6.4代码如下,是MOOC大学里一个网络爬虫的代码:
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.f('/td').children:
            if isinstance(tr,bs4.element.Tag):
                  tds = tr('td')
                  ulist.append([tds[0].string,tds[1].string,tds[3].string])

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

def main():
      uinfo = []
      url = 'http://www.zuihaodaxue.cn/shengyuanzhiliangpaiming2016.html'
      html = getHTMLText(url)
      fillUnivList(uinfo,html)
      printUnivList(uinfo)
main()


回溯(最后调用):
  File "C:\Users\Administrator\Music\爬世界大学排行榜.py", line 34, in <module>
    main()
  File "C:\Users\Administrator\Music\爬世界大学排行榜.py", line 32, in main
    fillUnivList(uinfo,html)
  File "C:\Users\Administrator\Music\爬世界大学排行榜.py", line 17, in fillUnivList
    for tr in soup.f('/td').children:
TypeError: 'NoneType' object is not callable
最佳答案
2018-1-9 16:37:13
我调试了下,你这个代码很多地方不全,我做了些修改,你看下
  1. import requests
  2. from bs4 import BeautifulSoup
  3. import bs4


  4. def getHTMLText(url):
  5.       try:
  6.             r = requests.get(url,timeout = 30)
  7.             r.raise_for_status()
  8.             r.encoding = r.apparent_encoding
  9.             return r.text
  10.       except:
  11.             return ""

  12. def fillUnivList(ulist,html):
  13.       soup = BeautifulSoup(html,"html.parser")
  14.       for tr in soup.findAll('tr'):
  15.             if isinstance(tr,bs4.element.Tag):
  16.                   tds = tr('td')
  17.                   if tds == None or len(tds)==0:
  18.                         continue
  19.                   # print(tds)
  20.                   ulist.append([tds[0].string,tds[1].string,tds[3].string])

  21. def printUnivList(ulist,num):
  22.       print("{:^10}\t{:^6}\t{:^10}".format("排名","学校名称","总分"))
  23.       for i in range(num):
  24.             u = ulist[i]
  25.             print("{:^10}\t{:^6}\t{:^10}".format(u[0],u[1],u[2]))

  26. def main():
  27.       uinfo = []
  28.       url = 'http://www.zuihaodaxue.cn/shengyuanzhiliangpaiming2016.html'
  29.       html = getHTMLText(url)
  30.       fillUnivList(uinfo,html)
  31.       printUnivList(uinfo, 20)

  32. if __name__ == "__main__":
  33.     main()
复制代码

最佳答案

查看完整内容

我调试了下,你这个代码很多地方不全,我做了些修改,你看下
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-1-9 16:37:13 | 显示全部楼层    本楼为最佳答案   
我调试了下,你这个代码很多地方不全,我做了些修改,你看下
  1. import requests
  2. from bs4 import BeautifulSoup
  3. import bs4


  4. def getHTMLText(url):
  5.       try:
  6.             r = requests.get(url,timeout = 30)
  7.             r.raise_for_status()
  8.             r.encoding = r.apparent_encoding
  9.             return r.text
  10.       except:
  11.             return ""

  12. def fillUnivList(ulist,html):
  13.       soup = BeautifulSoup(html,"html.parser")
  14.       for tr in soup.findAll('tr'):
  15.             if isinstance(tr,bs4.element.Tag):
  16.                   tds = tr('td')
  17.                   if tds == None or len(tds)==0:
  18.                         continue
  19.                   # print(tds)
  20.                   ulist.append([tds[0].string,tds[1].string,tds[3].string])

  21. def printUnivList(ulist,num):
  22.       print("{:^10}\t{:^6}\t{:^10}".format("排名","学校名称","总分"))
  23.       for i in range(num):
  24.             u = ulist[i]
  25.             print("{:^10}\t{:^6}\t{:^10}".format(u[0],u[1],u[2]))

  26. def main():
  27.       uinfo = []
  28.       url = 'http://www.zuihaodaxue.cn/shengyuanzhiliangpaiming2016.html'
  29.       html = getHTMLText(url)
  30.       fillUnivList(uinfo,html)
  31.       printUnivList(uinfo, 20)

  32. if __name__ == "__main__":
  33.     main()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-1-9 16:38:04 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-1-9 16:38:34 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-1-9 16:39:04 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-1-9 16:59:26 | 显示全部楼层
根据提示来看
soup.f('/td').children 为空,说明爬取失败
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-1-9 17:26:17 | 显示全部楼层
久疤K 发表于 2018-1-9 16:37
我调试了下,你这个代码很多地方不全,我做了些修改,你看下

谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-1-9 17:27:52 | 显示全部楼层

不谢,我也在锻炼,最主要的是挣鱼币
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-1-10 09:44:43 | 显示全部楼层
久疤K 发表于 2018-1-9 17:27
不谢,我也在锻炼,最主要的是挣鱼币

我自己又琢磨了一下,如下:

import requests
from bs4 import BeautifulSoup
import bs4


def getHTMLText(url):
      try:
            r = requests.get(url,timeout = 3000)
            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:##error
            if isinstance(tr,bs4.element.Tag):
                  tds = tr('td')
                  ulist.append([tds[0].string,tds[1].string,tds[3].string])

def printUnivList(ulist,num):
      print("{:^10}\t{:^6}\t{:^10}".format("排名","学校名称","总分"))
      for i in range(num):
            u = ulist[i]##error
            print("{:^10}\t{:^6}\t{:^10}".format(u[0],u[1],u[2]))

def main():
      uinfo = []
      url = 'http://www.zuihaodaxue.cn/shengyuanzhiliangpaiming2016.html'
      html = getHTMLText(url)
      fillUnivList(uinfo,html)
      printUnivList(uinfo,500)
main()
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-1-10 12:06:15 | 显示全部楼层
大嗄鱼 发表于 2018-1-10 09:44
我自己又琢磨了一下,如下:

import requests

可以的,加油,大嘎鱼会变成小甲鱼的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-3-5 17:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表