【发布时间】:2016-01-20 05:48:39
【问题描述】:
我正在尝试使用以下代码从 BoxOfficeMojo.com 上每部电影的页面中抓取特定数据。不幸的是,xpath 返回一个空列表。一些帖子建议从 xpath 中删除 tbody,但这也会返回一个空列表。我使用相同的代码从烂番茄和 IMBD 中提取文本,并且 xpath 运行良好。有谁知道为什么会发生这种情况以及如何解决?
from lxml import html
import requests
# Box Office Mojo Scrape
page = requests.get('http://www.boxofficemojo.com/movies/?page=main&id=ateam.htm')
tree = html.fromstring(page.text)
print tree.xpath('//*[@id="body"]/table[2]/tbody/tr/td/table[1]/tbody/tr/td[2]/table/tbody/tr/td/center/table/tbody/tr[1]/td/font/b/text()')
print tree.xpath('//*[@id="body"]/table[2]/tr/td/table[1]/tr/td[2]/table/tr/td/center/table/tr[1]/td/font/b/text()')
# Rotten Tomatoes Scrape
page2 = requests.get('http://www.rottentomatoes.com/m/star_wars_episode_vii_the_force_awakens/')
tree2 = html.fromstring(page2.text)
print tree2.xpath('//*[@id="scorePanel"]/div[2]/div[1]/a/div/div[2]/div[1]/span/text()')
# IMDB Scrape
page3 = requests.get('http://www.imdb.com/title/tt2488496/?ref_=nv_sr_1')
tree3 = html.fromstring(page3.text)
print tree3.xpath('//*[@id="overview-top"]/h1/span[1]/text()')
【问题讨论】:
-
您需要告诉我们更多您想要为我们提供帮助的内容。然而,即使没有告诉我们你在追求什么,我也能看出一个问题。 id 为 body 的元素仅包含一个表,其他所有内容都在该表中,但您要求的是该 div 下的第二个表。由于只有一个表,因此您将获得一个空节点集。因此,您的问题出现在您的位置路径
//*[@id="body"]/table[2]的开头。 -
@Matthew 我试图在第一个表中提取“国内总毛”值:77,222,099 美元。我不确定只有一张桌子是什么意思。当我检查 html 树时,. 下有几个表其他表包含在 body div 中的单个表中。