2.3.2 通过xpath方法按层级查找数据
定位好之后,我们就可以用etree对象的xpath方法解析xpath表达式,查找到相应的数据。
定位到电影的标题所在标签,右键复制它的xpath:
//\*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a/span[1]
中文标题就在a标签下的第1个span标签中span[1],然后我们通过/text()获取该标签中的文本信息。
# 获取中文电影标题
title_cn = data.xpath('//\*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a/span[1]/text()')
而在a标签下的第二个span标签中包含的文本内容是电影的英文标题,所以我们只需要将span[1]改成span[2]就可以获取到电影的英文标题。
# 获取英文电影标题
title_en = data.xpath('//\*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a/span[2]/text()')
接下来获取电影详情页的链接,链接就在a标签中,是a标签的属性href的属性值,我们复制a标签的xpath。
//\*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a
定位到a标签,要取其属性href的值需要在该路径后加上/@href 即可。
# 获取电影详情页链接
detail_link = data.xpath('//\*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a/@href')
将这些信息打印看一下是否获取到正确信息:
我们已经获取到了第一部电影的中英文标题和详情页链接,它们都各自存放在一个列表中。
接下来我们可以用同样的方法获取电影的导演、主演、上映年份、国籍、类型和评分。
# 获取电影的导演和主演
people = data.xpath('//\*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[2]/p[1]/text()[1]')
# 获取电影的年份、国籍和类型
info = data.xpath('//\*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[2]/p[1]/text()[2]')
# 获取电影的评分
score = data.xpath('//\*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[2]/div/span[2]/text()')
打印数据: