使用 python 和 lxml 爬取 imdb 数据库

crawling imdb database using python and lxml

hxs = lxml.html.document_fromstring(requests.get("http://www.imdb.com/title/" + id).content)

movie = {}

try:
    movie['title'] = hxs.xpath('//*[@id="overview-top"]/h1/span[1/text()'[0].strip()


except IndexError:
    movie['title']

我无法理解 "hxs.xpath('//*[@id="overview-top"]/h1/span[1]/text()')[0].strip()"

下面的函数 lxml.html.document_fromstring(string) 从给定的字符串中解析文档。这总是创建一个正确的 HTML 文档,这意味着 parent 节点是 ,并且有一个 body 并且可能是一个 head.

hxs = lxml.html.document_fromstring(requests.get("http://www.imdb.com/title/" + id).content)

您可以使用此代码查看 html。

print lxml.html.tostring(hxs)

考虑标题为tt1905041的IMDb电影,考虑网页的html源代码,

<td id="overview-top">
    <h1 class="header"> <span class="itemprop" itemprop="name">Fast &amp; Furious 6</span>
        <span class="nobr">(<a href="/year/2013/?ref_=tt_ov_inf" >2013</a>)</span>
    </h1>
</td>

因此,因为我们需要标题,所以我们从外部解析它 html,

[@id="overview-top"] 将选择所需的 id 元素

h1

span1 由于有多个 span 元素,我们选择第一个。 与我们解析 html 类似,我们得到以下代码,

movie['title'] = hxs.xpath('//*[@id="overview-top"]/h1/span[1]/text()')[0].strip()
print movie['title']

输出:愤怒 6

关于 XPath 的更多信息here