吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4676|回复: 15
收起左侧

[Python 转载] 【Python爬虫】获取某电影网站电影排行,主要是JSON的应用。

  [复制链接]
小涩席 发表于 2020-3-6 00:32
如题:主要是Python中爬虫对于JSON数据的采集和清洗。
其中运用到了列表、字典、键值对、文件操作、目录创建判断等。
代码如下:



# -*- coding : "UTF-8" -*-
# 学习豆瓣网JSON数据提取
# Author:XSX

import requests
import json
import os

def UrlAdd():
    URllists = []
    url = "https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start={}"
    for i in range(16):
        urls = url.format(i * 20)
        URllists.append(urls)
    print(URllists)
    return URllists

def GetJson(URllists, headers):
    ContentLists = []
    for URllist in URllists:
        r = requests.get(URllist, headers=headers)
        r.encoding = r.apparent_encoding
        results = json.loads(r.text)
        for i in results['subjects']:
            contents = {}
            contents['电影名'] = i['title']
            contents['评分'] = i['rate']
            contents['链接'] = i['url']
            contents['图片地址'] = i['cover']
            ContentLists.append(contents)
    print("采集所有电影完成!")
    print("正在开始准备写入文件····")
    return ContentLists

def SaveCVS(ContenLists):
    if not os.path.exists('./DouBan'):
        os.mkdir('./DouBan')
    try:
        os.remove('./DouBan/MV.csv')
    except:
        pass
    with open('./DouBan/MV.csv', 'a')as f:
        f.write('电影名, 评分, 链接, 图片地址' + '\n')
        for ContenList in ContenLists:
            f.write(ContenList['电影名'] + ',' + ContenList['评分'] + ',' + ContenList['链接'] + ',' + ContenList['图片地址'] + '\n')
        print('文件已写入完成!')

if __name__ == '__main__':
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
        'Cookie': 'bid=S3X0xqEuDe0; douban-fav-remind=1; __gads=ID=325982641d75d756:T=1581695651:S=ALNI_MaX8VdbavsyZmjMt2IuEp4z4OOpQg; ll="118348"; __utmc=30149280; __utma=223695111.1906555551.1583420349.1583420349.1583420349.1; __utmb=223695111.0.10.1583420349; __utmc=223695111; __utmz=223695111.1583420349.1.1.utmcsr=douban.com|utmccn=(referral)|utmcmd=referral|utmcct=/; __utma=30149280.1158841288.1581695650.1583420349.1583420349.3; __utmz=30149280.1583420349.3.3.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; __utmt=1; __utmb=30149280.1.10.1583420349; ap_v=0,6.0; _pk_ref.100001.4cf6=%5B%22%22%2C%22%22%2C1583420349%2C%22https%3A%2F%2Fwww.douban.com%2F%22%5D; _pk_ses.100001.4cf6=*; __yadk_uid=HeAvEEVH3ASJU25vpCZTlhMH45m11GFf; ct=y; _pk_id.100001.4cf6=b88618ec651debfc.1583420349.1.1583420374.1583420349'
    }
    SaveCVS(GetJson(UrlAdd(), headers))

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
hshcompass + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

liiv700718 发表于 2020-3-6 14:47
本帖最后由 liiv700718 于 2020-3-6 15:01 编辑
小涩席 发表于 2020-3-6 12:57
我这边是正常的,你检查一下是不是python版本的问题,我的是3系列的。

可能是cookie的问题,换成自己的没问题,但要注意封账号的问题,多爬了几次,我的账号差一点给封了
稍微修改了一下,把图片也爬了
没加cookie,想试试的话加上自己的吧
[Python] 纯文本查看 复制代码

#! usr/bin/python3
# -*- coding : "UTF-8" -*-

import requests
import json
import os
import time


def get_urls():
    urls = [f"https://movie.douban.com/j/search_subjects?type=movie&tag" \
            f"=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20" \
            f"&page_start={i * 20}" for i in range(18)]
    # print(urls)
    return urls


def get_json(urls, headers):
    contents = []
    for url in urls:
        print(f"开始采集第 {int(url.split('=')[-1]) // 20 + 1} 页...")
        r = requests.get(url, headers=headers)
        r.encoding = r.apparent_encoding
        results = json.loads(r.text)
        for i in results['subjects']:
            content = {}
            content['电影名'] = i['title']
            content['评分'] = i['rate']
            content['链接'] = i['url']
            content['图片地址'] = i['cover']
            # print(content)
            for item in content.items():
                print(item)
            contents.append(content)
        print(f"\n第 {int(url.split('=')[-1]) // 20 + 1} 页采集完成\n")
        time.sleep(1)

    print("采集所有电影完成!")
    return contents


def save2file(contents):
    print("正在开始准备写入文件····")
    if not os.path.exists('./DouBan'):
        os.mkdir('./DouBan')
    try:
        os.remove('./DouBan/MV.csv')
    except:
        pass
    with open('MV.csv', 'a')as f:
        f.write('电影名, 评分, 链接, 图片地址' + '\n')
        for content in contents:
            f.write(f"{content['电影名']}, {content['评分']}, "
                    f"{content['链接']}, {content['图片地址']}\n")
    print('文件已写入完成!')

    print("\n开始采集图片\n")
    i = 1
    for content in contents:
        url = content['图片地址']
        image = requests.get(url, headers=headers)
        with open(f"./DouBan/{i:03} {content['电影名']} {content['评分']}.jpg",
                  'wb') as fp:
            fp.write(image.content)
        print(f"第 {i:03} 张图片 --{content['电影名']}-- 采集完成")
        i += 1
    print('全部图片采集完成')


if __name__ == '__main__':
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
                      'AppleWebKit/537.36 (KHTML, like Gecko) '
                      'Chrome/80.0.3987.132 Safari/537.36',
        'Cookie': '***'
    }
    save2file(get_json(get_urls(), headers))
 楼主| 小涩席 发表于 2020-3-6 12:54
chao2300984 发表于 2020-3-6 11:22
楼主写的很好,最近我也在学爬虫,拿来借鉴借鉴
可以把cookies换成自己的,别用楼主提供的,弄不好连累楼 ...

哈哈,感谢层主理解
青蛙考拉 发表于 2020-3-6 04:35
如何放入自己的影视网站?求详解,这个接口要是成功,会省好多事儿啊
jun20014444 发表于 2020-3-6 07:47
东西好,就是不会用怎么办?
shi128862 发表于 2020-3-6 07:54
好东西,来拿学习
liiv700718 发表于 2020-3-6 08:45
只能采集到第一页,后面的没采集到

image.png



KILLCALL 发表于 2020-3-6 09:07
青蛙考拉 发表于 2020-3-6 04:35
如何放入自己的影视网站?求详解,这个接口要是成功,会省好多事儿啊

要自定添加,直接加到后面进去就好
KILLCALL 发表于 2020-3-6 09:08
liiv700718 发表于 2020-3-6 08:45
只能采集到第一页,后面的没采集到

都在里面的,总高好几百条,可以不带cookie爬取
大中介 发表于 2020-3-6 10:05

好东西,来拿学习
vagrantear 发表于 2020-3-6 10:28
好东西,先收藏了,感谢分享经验
chao2300984 发表于 2020-3-6 11:22
楼主写的很好,最近我也在学爬虫,拿来借鉴借鉴
可以把cookies换成自己的,别用楼主提供的,弄不好连累楼主
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-17 00:29

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表