python爬取豆瓣电影并保存到数据库

1,分析url,获取热门电影的url

豆瓣采用的市ajax动态加载技术,我们可以直接找到json数据的url
url = 'https://movie.douban.com/j/search_subjectstype=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=330&page_start=0'

1,先获取到json数据

def get_data():
    url = 'https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=330&page_start=0'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36'
    }
    json_data = requests.get(url,headers = headers)
    #print(json_data.text)
    data = json_data.text
    json_data = json.loads(data)
    subjects = json_data['subjects']
    result = []
    for movie in subjects:
        row = {
            'movie_rate': movie['rate'],
            'movie_name': movie['title'],
            'movie_url' : movie['url']
        }
        result.append(row)
    return result

2,保存到数据库

def sava_data(data):
    config = {
        'host':'127.0.0.1',
        'port':3306,
        'user':'root',
        'password':'',
        'database':'douban',
        'charset':'utf8'
    }
    conn = pymysql.connect(**config)
    cursor = conn.cursor()
    sql = '''
        insert into t_movie
            (movie_rate, movie_name, movie_url)
        values 
            (%(movie_rate)s,%(movie_name)s,%(movie_url)s)
    '''
    cursor.executemany(sql,data)
    conn.commit()
    cursor.close()
    conn.close()

3,创建数据库

先创建数据库,如何插入数据,插入语句为:

create table t_movie(
    id int primary key auto_increment,
    movie_rate varchar(200),
    movie_name varchar(200), 
    movie_url varchar(200)
) engine=Innodb charset utf8;

4,完整代码

import json
import requests
import pymysql

def get_data():
    url = 'https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=330&page_start=0'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36'
    }
    json_data = requests.get(url,headers = headers)
    #print(json_data.text)
    data = json_data.text
    json_data = json.loads(data)
    subjects = json_data['subjects']
    result = []
    for movie in subjects:
        row = {
            'movie_rate': movie['rate'],
            'movie_name': movie['title'],
            'movie_url' : movie['url']
        }
        result.append(row)
    return result

def sava_data(data):
    config = {
        'host':'127.0.0.1',
        'port':3306,
        'user':'root',
        'password':'',
        'database':'douban',
        'charset':'utf8'
    }
    conn = pymysql.connect(**config)
    cursor = conn.cursor()
    sql = '''
        insert into t_movie
            (movie_rate, movie_name, movie_url)
        values 
            (%(movie_rate)s,%(movie_name)s,%(movie_url)s)
    '''
    cursor.executemany(sql,data)
    conn.commit()
    cursor.close()
    conn.close()

if __name__ == '__main__':
    sava_data(get_data())

运行完后查看数据库

  • 14
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值