找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 14145|回复: 8

[求助] 爬虫-出现错误:unsupported format string passed to NoneType.__format__

1

主题

4

帖子

4

积分

贫民

积分
4
tanhua4975 发表于 2017-6-6 18:37:14 | 显示全部楼层 |阅读模式
1威望
最近在学习网页爬虫,想照着视频教学里的程式码,自己爬取另一个网站试试,但是出现了以下这段错误:
unsupported format string passed to NoneType.__format__
爬的网址是:https://nba.hupu.com/stats/teams
希望大神帮忙看看,到底哪里出现了错误,解救一下我,谢谢!
以下是代码:
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([tds[0].string,tds[1].string])


def printUnivList(ulist, num):
    print("{0:10}\t{1:.10}".format("排名","球队"))
    for i in range(num):
        u=ulist
        print("{0:10}\t{1:10}".format(u[0],u[1]))

def main():
    uinfo = []
    url = 'https://nba.hupu.com/stats/teams'
    html = getHTMLText(url)
    fillUnivList(uinfo, html)
    printUnivList(uinfo, 20) # 20 univs

main()



回复

使用道具 举报

0

主题

11

帖子

11

积分

贫民

积分
11
qwertywhb 发表于 2017-6-7 15:24:33 | 显示全部楼层
我用你的代码就修改了一下输出没问题啊排名 球队
1 勇士
2 火箭
3 掘金
4 骑士
5 奇才
6 快船
7 凯尔特人
8 开拓者
9 太阳
10 猛龙
11 雷霆
12 篮网
13 森林狼
14 马刺
15 步行者
16 黄蜂
17 湖人
18 鹈鹕
回复

使用道具 举报

0

主题

11

帖子

11

积分

贫民

积分
11
qwertywhb 发表于 2017-6-7 15:26:06 | 显示全部楼层
你这个错误应该是这里错误 ulist.append([tds[0].string,tds[1].string]),把tad[0]输出看一下,有可能是none
回复

使用道具 举报

1

主题

4

帖子

4

积分

贫民

积分
4
tanhua4975  楼主| 发表于 2017-6-7 17:41:39 | 显示全部楼层
qwertywhb 发表于 2017-6-7 15:26
你这个错误应该是这里错误 ulist.append([tds[0].string,tds[1].string]),把tad[0]输出看一下,有可能是no ...

请问您可要把你修改过的代码发上来吗?我不是很懂您的意思,谢谢
回复

使用道具 举报

0

主题

11

帖子

11

积分

贫民

积分
11
qwertywhb 发表于 2017-6-8 09:34:13 | 显示全部楼层
tanhua4975 发表于 2017-6-7 17:41
请问您可要把你修改过的代码发上来吗?我不是很懂您的意思,谢谢

#coding=utf-8

import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )
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([tds[0].string,tds[1].string])
def printUnivList(ulist, num):
    print"排名","球队"
    for i in range(num):
        u=ulist
        if(i>1):
            print unicode(u[0]),unicode(u[1])

def main():
    uinfo = []
    url = 'https://nba.hupu.com/stats/teams'
    html = getHTMLText(url)
    fillUnivList(uinfo, html)
    printUnivList(uinfo, 20)

main()
回复

使用道具 举报

0

主题

11

帖子

11

积分

贫民

积分
11
qwertywhb 发表于 2017-6-8 09:38:47 | 显示全部楼层
回复还要审核
  1. #coding=utf-8

  2. import sys
  3. reload(sys)
  4. sys.setdefaultencoding( "utf-8" )
  5. import requests
  6. from bs4 import BeautifulSoup
  7. import bs4

  8. def getHTMLText(url):
  9.     try:
  10.         r = requests.get(url, timeout=30)
  11.         r.raise_for_status()
  12.         r.encoding = r.apparent_encoding
  13.         return r.text
  14.     except:
  15.         return ""

  16. def fillUnivList(ulist, html):
  17.     soup = BeautifulSoup(html, "html.parser")
  18.     for tr in soup.find('tbody').children:
  19.         if isinstance(tr, bs4.element.Tag):
  20.             tds = tr('td')
  21.             ulist.append([tds[0].string,tds[1].string])
  22. def printUnivList(ulist, num):
  23.     print"排名","球队"
  24.     for i in range(num):
  25.         u=ulist[i]
  26.         if(i>1):
  27.             print unicode(u[0]),unicode(u[1])

  28. def main():
  29.     uinfo = []
  30.     url = 'https://nba.hupu.com/stats/teams'
  31.     html = getHTMLText(url)
  32.     fillUnivList(uinfo, html)
  33.     printUnivList(uinfo, 20)

  34. main()
复制代码
回复

使用道具 举报

0

主题

11

帖子

11

积分

贫民

积分
11
qwertywhb 发表于 2017-6-8 15:56:40 | 显示全部楼层
tanhua4975 发表于 2017-6-7 17:41
请问您可要把你修改过的代码发上来吗?我不是很懂您的意思,谢谢

这论坛够2,发上来要审核,结果5个小时都没审核过
回复

使用道具 举报

1

主题

4

帖子

4

积分

贫民

积分
4
tanhua4975  楼主| 发表于 2017-6-8 20:20:21 | 显示全部楼层
qwertywhb 发表于 2017-6-8 15:56
这论坛够2,发上来要审核,结果5个小时都没审核过

哈哈 谢谢你。  没事 我当时发这个帖也审核了很久
回复

使用道具 举报

1

主题

4

帖子

4

积分

贫民

积分
4
tanhua4975  楼主| 发表于 2017-7-3 16:56:14 | 显示全部楼层

抱歉这么久没回你,我知道是什么问题了。
我用的是PYTHON3,你应该是用PYTHON2.X的吧?
PYTHON3之中,已经没有了reload(sys)和unicode这两个东西了。谢谢你的回答,下面这是PYTHON3可执行的代码。
#coding=utf-8

import importlib
importlib.reload(sys)

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([tds[0].string,tds[1].string])
def printUnivList(ulist, num):
    print("排名","球队")
    for i in range(num):
        u=ulist
        if(i>1):
            print(u[0],u[1])

def main():
    uinfo = []
    url = 'https://nba.hupu.com/stats/teams'
    html = getHTMLText(url)
    fillUnivList(uinfo, html)
    printUnivList(uinfo, 20)

main()
回复

使用道具 举报

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

本版积分规则

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