python - 使用 BeautifulSoup 抓取数据时出错
问题描述
我想从 IMDB 用户页面抓取会员年数数据。
链接
对于这个页面,有多个徽章,一个徽章对所有用户都是通用的,即最后一个。
我的代码:
def getYear(review_url):
response = requests.get(review_url, headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
})
soup = BeautifulSoup(response.text, 'html.parser')
year = soup.find_all('div', attrs={'class': 'value'})
## year = soup.select('.value')
return year[-1].get_text()
我参考了各种来源,发现在标题中添加用户代理已经解决了他们的问题,但我添加了相同的但没有工作。
函数调用:
getYear('https://www.imdb.com/user/ur102180396')
错误:
IndexError Traceback (most recent call last)
<ipython-input-24-dc3ce3a7e637> in <module>()
----> 1 getYear('https://www.imdb.com/user/ur102180396')
<ipython-input-23-5871162c538d> in getYear(review_url)
6 year = soup.find_all('div', attrs={'class': 'value'})
7
----> 8 return year[-1].get_text()
IndexError: list index out of range
这个错误是因为 soup.find_all() 方法返回空列表。我不知道为什么会这样,我对beautifulsoup 很陌生。可以看到奇怪的行为,有时这个函数工作正常并给出输出,但是一旦我对所有数据(2136 个用户链接)调用这个函数,就会得到这个错误。
所有用户的函数调用:
years = [getYear(url) for url in user_links]
这里 user_links 是包含 2136 个用户 url 的列表。
解决方案
可以看到奇怪的行为,有时这个函数工作正常并给出输出,但是一旦我对所有数据(2136 个用户链接)调用这个函数,就会得到这个错误。
这可能是因为 IMDB 没有响应您的请求,因为您一次发出了太多请求(在本例中为 2136 个)。
推荐阅读
- unity3d - Unity 2020.2 Alpha 不支持地形工具?
- python - 多索引json到数据框
- bpf - 如何在 bpftracing 脚本中使用结构
- eclipse - POM SNAPSHOT 的 Maven parent.relativePath 指向新父级而不是旧父级错误
- python - 我可以在循环 JSON 数据时附加到 pandas 数据框吗?
- android-espresso - Android Espresso 没有 NavController 设置错误
- amazon-web-services - AWS SES 从任何地址发送邮件
- asp.net - ASP.NET Core WebApplication IIS Express 错误
- r - 如何使用R中的泊松分布计算每小时到达率?
- c++ - 动态分配内存以创建列表(用于学校)C++