刮擦和HTTP错误404

时间:2018-02-27 23:38:04

标签: python beautifulsoup

观看YouTube视频,了解如何抓取多个网页。我复制了视频专线,并遇到了一些问题。首先,这是HTTP错误404.

[这是我的代码]

我相信在做了一些快速搜索之后,我认为这是因为字母'x'没有URL。如果我错了,请纠正我。有没有办法从ascii_lowercase中减去字母'x'?

here is my code

我的第二个问题就像我在视频中说的那样,我为行复制了代码行,但我没有得到玩家名字和数据。在检查之后我确实注意到玩家名称被标记为'th'并且未包含在'td'中。我尝试添加另一个for循环,但无法使其工作。

感谢您的帮助!!

1 个答案:

答案 0 :(得分:0)

当http stauts代码为404时,似乎urllib.request.urlopen抛出异常。我不知道这一点。如果仅在使用字母x构建的网址时使用

string.ascii_lowercase.replace('x', '')

应该有用。

如果不是这种情况,更防御的方法是在try调用中添加make_soup块,并在发生错误时执行某些操作。像这样:

import string
import urllib
import urllib.request
from bs4 import BeautifulSoup

def make_soup(url):
    r = urllib.request.urlopen(url)
    return BeautifulSoup(r, 'html.parser')

playerdatasaved = ''

for letter in string.ascii_lowercase:
    url = 'https://www.basketball-reference.com/players/' + letter + '/'

    try:
        soup = make_soup(url)
    except urllib.error.HTTPError:
        print('{} not found'.format(url))
        continue

    for record in soup.findAll('tr'):
        playerdata = ''
        for data in record.findAll('td'):
            playerdata = playerdata + ',' + data.text
        if len(playerdata) != 0:
            playerdata = playerdatasaved + "\n" + playerdata[1:]

这只会记录未找到的网址并跳转到下一个循环迭代,您可能希望(或需要)做其他事情。

您可能需要查看here以获取有关python中错误处理的更多信息。