Python - 抓取IMDb网站时的XPath问题

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

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

以下是我正在处理的示例网址:

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

使用“Inspect”浏览器功能,我找到了与所有actor名称相关的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,试图使它更通用,然后更具体,但它仍然没有返回任何东西

python python-3.x xpath web-scraping imdb
2个回答
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() 你的查询应该工作。


0
投票

从查看HTML开始,使用像//td[@class="primary_photo"]这样的简单xpath

<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>

蟒蛇:

for photo in doc.xpath('//td[@class="primary_photo"]'):
    print photo
热门问题
推荐问题
最新问题