如何使用Python从IMDb网站提取一些信息?

问题描述 投票:0回答:1

我试图为大学研究收集一些有关电视节目的信息。 我从 IMBd 网站上抓取了所有排名前 250 的电视节目的网址 https://www.imdb.com/chart/toptv/。我将它们存储在名为“tvshows_url”的 df 中,第一列中有链接,第二列中有标题。 现在我想从每个 url 中抓取用户评论、星级、评级、流行度、流派和年份,并将它们存储在 csv 文件中。 我尝试使用以下代码,但无法提取我需要的信息。我做错了什么?

import requests
from bs4 import BeautifulSoup
import pandas as pd

def extract_info(url):
    response = requests.get(url)
    soup = BeautifulSoup(requests.get(url,headers={'user-agent':'some-agent'}).content,"html.parser")
    
    # Extract user reviews
    user_reviews = soup.find('span', {'class': 'rating'}).text.strip()

    # Extract stars
    stars = soup.find('a', class_="ipc-metadata-list-item__icon-link").text.strip()

    # Extract rating
    rating = soup.find('span', class_="sc-bde20123-1 cMEQkK").get('content')

    # Extract popularity
    popularity = soup.find('div', class_="sc-5f7fb5b4-1 fTREEx").text.strip()
    
    # Extract genres
    genres = soup.find('a', class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link").get('content')
   
    # Extract year
    year = soup.find('a', lass="ipc-link ipc-link--baseAlt ipc-link--inherit-color").text.strip()
    
    return user_reviews, stars, rating, popularity, genres, year

# Apply the function to all url
extracted_info = tvshows_url['link'].apply(lambda x: extract_info(x))

# Create a DataFrame 
df = pd.DataFrame(extracted_info.tolist(), columns=['User_Reviews', 'Stars', 'Rating', 'Popularity', 'Genres', 'Year'])
print(df)

#Export
df.to_csv('IMDV Top Tv Shows.csv')
python web-scraping beautifulsoup
1个回答
0
投票

你做错的是你没有使用更强大的框架。您应该使用 Selenium,它基本上使用 Python 模拟整个浏览器,因此您可以混合普通用户所做和可以做的任何事情。

以下是如何开始:https://selenium-python.readthedocs.io/

您可以使用任何浏览器,有所谓的运行程序,它们是打开浏览器并模拟任何内容的包。

您可以使用 XSL 或 CSS 定位任何元素。

© www.soinside.com 2019 - 2024. All rights reserved.