拜托,我需要有人帮助我。我不明白为什么我只爬取 25 部电影而不是 250 部电影。我的代码:
import pandas as pd
import requests
from bs4 import BeautifulSoup
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'}
url = "https://www.imdb.com/chart/top/?ref_=nv_mv_250"
response = requests.get(url, headers = headers)
html_doc = response.content
soup = BeautifulSoup(html_doc, "html.parser")
ls = soup.find_all("div", class_="sc-b189961a-0 hBZnfJ cli-children")
print(len(ls))
结果是 25。链接: https://www.imdb.com/chart/top/?ref_=nv_mv_250| ||,这里有 250 部电影,我使用 BeautifulSoup。结果 len(ls) 应为 250。 请解释并帮助我解决这个问题。非常感谢! 我希望我能爬取这个网站上的完整数据
I hope I can crawl fully data on this Web
遇到的是 IMDb 网站动态加载内容的问题。当前的代码只获取了初始页面加载的 HTML,其中包含前 25 部电影。其余的 225 部电影是通过 JavaScript 动态加载的。
为了爬取所有 250 部电影的数据,需要使用可以渲染 JavaScript 并完全加载页面的工具,例如 Selenium 或 Playwright。
以下是用 Playwright 爬取所有 250 部电影信息的代码示例:
from playwright.sync_api import sync_playwright
def main():
with sync_playwright() as p:
browser = p.chromium.launch(headless=False) # 设置为 False 可以看到浏览器运行过程
page = browser.new_page()
page.goto("https://www.imdb.com/chart/top/?ref_=nv_mv_250")
# 等待所有电影加载完成
page.wait_for_selector("div.sc-b189961a-0.hBZnfJ.cli-children:nth-child(250)")
# 获取所有电影信息
ls = page.query_selector_all("div.sc-b189961a-0.hBZnfJ.cli-children")
print(len(ls)) # 应该输出 250
# 进一步提取需要的数据,例如电影标题,年份,评分等
browser.close()
if __name__ == "__main__":
main()
代码解释:
-
导入 playwright 库:
from playwright.sync_api import sync_playwright
-
启动浏览器:
使用
sync_playwright
上下文管理器启动 Chromium 浏览器。 -
创建新页面并访问目标网址:
使用
browser.new_page()
创建新页面,并使用page.goto()
方法访问 IMDb Top 250 电影页面。 -
等待所有电影加载:
page.wait_for_selector
会等待页面加载到指定的元素(这里是第250部电影)才会继续执行,确保所有 250 部电影信息都已加载。 -
获取所有电影元素:
使用
page.query_selector_all()
方法选择所有包含电影信息的div
元素,并存储在ls
列表中。 -
输出电影数量:
打印
ls
列表的长度,确认是否获取了所有 250 部电影。 -
进一步提取数据:
可以根据需要,从
ls
列表中的每个电影元素中提取电影标题、年份、评分等信息。
请确保已经安装了 Playwright 库:
pip install playwright
python -m playwright install
使用 Playwright 或类似工具可以解决动态加载内容的问题,并让成功爬取所有 250 部电影的数据。
标签:python,web-scraping,beautifulsoup,web-crawler From: 78771840