我试图为大学研究收集一些有关电视节目的信息。 我从 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')
你做错的是你没有使用更强大的框架。您应该使用 Selenium,它基本上使用 Python 模拟整个浏览器,因此您可以混合普通用户所做和可以做的任何事情。
以下是如何开始:https://selenium-python.readthedocs.io/
您可以使用任何浏览器,有所谓的运行程序,它们是打开浏览器并模拟任何内容的包。
您可以使用 XSL 或 CSS 定位任何元素。