首页 > 解决方案 > Python - 抓取 IMDb 网站时出现 XPath 问题

问题描述

我正在尝试使用 Python 在 IMDb 上抓取电影,我可以获得有关除演员姓名之外的所有重要方面的数据。

这是我正在处理的示例 URL:

https://www.imdb.com/title/tt0106464/

使用“检查”浏览器功能,我找到了与所有参与者名称相关的 XPath,但是当在 Python 上运行代码时,看起来 XPath 无效(不返回任何内容)。

这是我正在使用的代码的简单版本:

import requests
from lxml import html

movie_to_scrape = "https://www.imdb.com/title/tt0106464"
timeout_time = 5

IMDb_html = requests.get(movie_to_scrape, timeout=timeout_time)
doc = html.fromstring(IMDb_html.text)
actors = doc.xpath('//table[@class="cast_list"]//tbody//tr//td[not(contains(@class,"primary_photo"))]//a/text()')
print(actors)

我尝试多次更改 XPath,试图使其更通用,然后更具体,但它仍然没有返回任何内容

标签: pythonpython-3.xxpathweb-scrapingimdb

解决方案


不要盲目地接受你看到的使用inspect element.
浏览器非常宽松,并会尝试修复源代码中的任何标记问题。
话虽如此,如果您检查源代码,view source您可以看到您要抓取的表没有<tbody>,因为它们是由浏览器插入的。
因此,如果您从此处删除它 //table[@class="cast_list"]//tbody//tr//td[not(contains(@class,"primary_photo"))]//a/text()->//table[@class="cast_list"]//tr//td[not(contains(@class,"primary_photo"))]//a/text()
您的查询应该可以工作。


推荐阅读