我正在尝试使用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,以使其更通用然后更具体,但是它仍然不返回任何内容
答案 0 :(得分:1)
不要盲目接受使用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()
您的查询应该可以使用。
答案 1 :(得分:0)
从查看HTML开始,从简单的xpath开始,例如//td[@class="primary_photo"]
<table class="cast_list">
<tr><td colspan="4" class="castlist_label">Cast overview, first billed only:</td></tr>
<tr class="odd">
<td class="primary_photo">
<a href="/name/nm0000418/?ref_=tt_cl_i1"
><img height="44" width="32" alt="Danny Glover" title="Danny Glover" src="https://m.media-amazon.com/images/G/01/imdb/images/nopicture/32x44/name-2138558783._CB470041625_.png" class="loadlate hidden " loadlate="https://m.media-amazon.com/images/M/MV5BMTI4ODM2MzQwN15BMl5BanBnXkFtZTcwMjY2OTI5MQ@@._V1_UY44_CR1,0,32,44_AL_.jpg" /></a> </td>
<td>
PYTHON:
for photo in doc.xpath('//td[@class="primary_photo"]'):
print photo