H5W3
当前位置:H5W3 > 其他技术问题 > 正文

豆瓣电影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…

回答:

虽然不对题。但是该偷得懒就得偷啊 https://api.douban.com/v2/mov…
这个top250有接口的

回答:

把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里没有.可以写到文件里.

本文地址:H5W3 » 豆瓣电影top250用xpath爬取时遇到的一些问题

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址