如何导出豆瓣所有的8~9分的电影?

https://movie.douban.com/tag/#/?sort=U&range=8,9&tags=电影

9分的电影只有1000多,chrome加载完后,用一个chrome扩展提取所有的链接就导出来了

但是8分~9分的,手工点击到了3000条记录还没有结束,一直手工加载也没有问题,但是问题是,到了2000多时,点击网页底部的『加载更多』反应很慢,间隔3~4分钟,再去点击才能加载。

请问如何导出所有的8~9分电影的URL链接呢?

试了东方永页机,但不到一会就不动了

试试python

发现一个永页机用户

试试 https://movie.douban.com/j/new_search_subjects?sort=U&range=8,9&tags=电影&start=0 写个定时器获取,start后面20 20累加

我一打开是这样,是需要配合永页机的使用吗?

看起来像JSON数据,在后面累加20,内容会有变化

但是,写个定时器,对我这样的菜鸟而言。。。。

兄弟,学编程吗?(Doge

我数学从来没有及格过,当我看到代码里面的()函数、+、-……我躲还来不及,目前正在用那个永页机+手工点击一个下午了,哈哈哈(一边做别的,休息时再点击一下)

我去永页机的作者帖子留言一下,说不定运气好,他给我加了一个外挂……哈哈

let start=0,result=[],urls=[];let getData=()=>{fetch('https://movie.douban.com/j/new_search_subjects?sort=U&range=8,9&tags=%E7%94%B5%E5%BD%B1&start='+start).then(response=>response.json()).then(data=>{if(data && data.data){result=result.concat(data.data);data.data.forEach(d=>{urls.push(d.url)});start+=20;console.log(start)}getData()}).catch(e=>{setTimeout(()=>getData(),1000)})};getData();

顺手写了个,你试试。result是结果集合数组,urls是链接数组。不过似乎豆瓣有某时间段内300条的限制。要想一次拉取要多用几个IP

深深的理解,不过编程也没那么难,真的,你看大佬刚刚给你写的代码,多简短啊(Double Doge

import json
import time
import urllib.request

url = 'https://movie.douban.com/j/new_search_subjects?sort=U&range=8,9&tags=%E7%94%B5%E5%BD%B1&start='

herders = {
    'User-Agent':
    'Mozilla/5.0 (Windows NT 6.1;WOW64) AppleWebKit/537.36 (KHTML,like GeCKO) Chrome/45.0.2454.85 Safari/537.36 115Broswer/6.0.3',
    'Referer': 'https://movie.douban.com/',
    'Connection': 'keep-alive'
}

num = 0
data = []
while True:
    req = urllib.request.Request('{}{}'.format(url, num), headers=herders)
    response = urllib.request.urlopen(req)
    html = json.loads(response.read().decode('utf8'))['data']
    if len(html) > 0:
        data = data + html
    else:
        break

    num = num + 20
    time.sleep(50)

with open('douban_movie.json', 'w') as f:
    json.dump(data, f)

写了个python版的 50秒抓一次 最后会保存个json

3 Likes

@Hoothin 即作者,喵哈哈哈

个人一般对速度需求不高,我一般会推荐超低速……挂它一个晚上

我从另外一个思路来解决一下这个事情。

首页确定下目的,看遍 8~9 分的电影,那么直接利用豆瓣的“已看过”功能,就能解决这个问题。

每看过一部电影就来标记已看过,然后再次打开这个页面,过滤“我没看过”就剩下了其余的影片。

我觉得这样的操作相当优雅。当然 每看过一部电影就来标记已看过 这件事一点也不简单。

至于一次性下载所有影片,或者导出后在其他地方使用,远不如直接标记已看过来的简单。

当然如果是其他需求,就是要爬这个列表,那就是另外一回事了。

1 Like

我运行之后出现了错误

我装了一个pycharm之后,试图找到requests模块,找不到。。。

参考的教程:

不容易不容易,晚上看看怎么运行这个py文件

青蛙,我的目的是找到8~9分中,我没有看过的电影

所以,所有的8~9分的电影URL需要收集下来,闲暇时一个一个的慢慢看,看到哪一部分有兴趣,就mark一下,不感兴趣的就pass,当成一个发现好电影的途径

你用的是python2吧 看看这个