我想从 IMDB 用户页面抓取会员年数数据。
Link
对于此页面,有多个徽章,一个徽章对所有用户通用,即最后一个。
我的代码:
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 的列表。
答案 0 :(得分:0)
奇怪的行为是有时这个函数工作正常并给出输出,但是一旦我对所有数据(2136 个用户链接)调用这个函数,就会得到这个错误。 >
这可能是因为 IMDB 没有响应您的请求,因为您一次发出了太多请求(在本例中为 2136)。