观看YouTube视频,了解如何抓取多个网页。我复制了视频专线,并遇到了一些问题。首先,这是HTTP错误404.
[这是我的代码]
我相信在做了一些快速搜索之后,我认为这是因为字母'x'没有URL。如果我错了,请纠正我。有没有办法从ascii_lowercase中减去字母'x'?
我的第二个问题就像我在视频中说的那样,我为行复制了代码行,但我没有得到玩家名字和数据。在检查之后我确实注意到玩家名称被标记为'th'并且未包含在'td'中。我尝试添加另一个for循环,但无法使其工作。
感谢您的帮助!!
答案 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中错误处理的更多信息。