豆瓣电影top250用xpath爬取时遇到的一些问题

豆瓣电影top250的页面结构如图示

豆瓣电影网页

我现在想获取每个电影的电影名,也就是图中的span标签,代码如下

items = html.xpath('//ol/li/div[@class="item"]')
for item in items:
    name = "" 
    try:
        name = item.xpath('//div[@class="info"]//div[@class="hd"]//a/span/text()')
    print(name)
    except Exception as e:
        raise e

输出结果如下,反正就是把整个页面的电影名都放在一起了

''肖申克的救赎', '\xa0/\xa0The Shawshank Redemption', '\xa0/\xa0月黑高飞(港)  /  刺激1995(台)', '这个杀手不太冷', '\xa0/\xa0Léon', '\xa0/\xa0杀手莱昂  /  终极追杀令(台)', '阿甘正传', '\xa0/\xa0Forrest Gump', '\xa0/\xa......

但是我想要的结果是分开获取,得到下面这样的效果

意思就是下面这样的效果
[
 ['肖申克的救赎', 'xa0/xa0The Shawshank Redemption', 'xa0/xa0月黑高飞(港) / 刺激1995(台)'],
 ['这个杀手不太冷', 'xa0/xa0Léon', 'xa0/xa0杀手莱昂 / 终极追杀令(台)'],
...
]

所以想问一下有什么办法?

-------------------------------------华丽分割线-----------------------------
-------------我已经找到解决办法了,但还是要谢谢大家了------------

其实修改办法很简单,是我自己对xpath用法不是很熟练,xpath用法中的反斜杠“/”我总是很混乱的用,看了网上的栗子明白了,修改之后结果得到了我想要的。代码如下

items = html.xpath('//ol/li/div[@class="item"]')
for item in items:
    name, info, star, quote = "", "", "", ""
    try:
# 仅仅修改了这一行就行了,最前面加个点号,表示当前节点,反斜杠用一个就行了,用两个表示匹配所有的(虽然我知道,但还是乱用了。。。)
# 修改之前的代码
      # name = item.xpath('//div[@class="info"]//div[@class="hd"]//a/span/text()')
        name = item.xpath('./div[@class="info"]/div[@class="hd"]/a//span/text()')
        print(name)
    except Exception as e:
        raise e

得到的结果如下

图片描述

注:参考http://www.mobile-open.com/20...

阅读 5.3k
2 个回答

把try里改成这样:

name = item.xpath('//div[@class="info"]//div[@class="hd"]//a')
for k in name:
    #print(k.xpath("//span/text()"))
    content = k.xpath("//span/text()")
    for v in content:
        print(v.encode('utf-8'))
    print()

你要在Windows cmd上完全输出中文,可能有问题,因为一些字符在gbk里没有.可以写到文件里.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题