使用 BeautifulSoup 抓取数据时出错

时间:2021-06-12 16:57:37

标签: python web-scraping beautifulsoup find

我想从 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 的列表。

1 个答案:

答案 0 :(得分:0)

奇怪的行为是有时这个函数工作正常并给出输出,但是一旦我对所有数据(2136 个用户链接)调用这个函数,就会得到这个错误。 >

这可能是因为 IMDB 没有响应您的请求,因为您一次发出了太多请求(在本例中为 2136)。