猫眼爬虫一-榜单爬取简单数据爬取,数据库存入

猫眼是一个很有影响力的电影数据分享平台,今天,我们要对这个网站的数据进行爬取,当然了,这个只是最初级的数据爬取,后面我会对该网站的加密数据进行爬取,希望能继续关注。
猫眼爬虫:爬取评分前100的电影并存入数据库
爬取数据前准备:先创建数据库表,并生成我们想要的保存到数据库中的列名(电影名称-上映时间-评分)python代码如

import pymysql
 
def create():
    db = pymysql.connect("localhost", "root", "liulinxs", "testdb")#连接数据库
    #更改自己的密码和testdb,这个很重要,等下表单创建好了可以在Navicat for MySQL中查询。
    '''
我这里的数据库名字是root,密码是liulinxs,你自己的不同得修改
    '''
 
    cursor = db.cursor()
    '''
下面是创建表单的写法,2019moviedata是我新创立的表单,先检验是否存在,再建立!
    '''
    cursor.execute("DROP TABLE IF EXISTS moviescore")

 #记得,两处地方都要修改,否则数据存储会出现问题。
    sql = """CREATE TABLE moviescore(
            name char(255),
            date int(255),
            score int(255))"""
 
    cursor.execute(sql)
    db.close()
    
create()

用Navicat for MySQL打开查看数据表,发现存在了该数据表。
在这里插入图片描述
即数据表创建成功,下面,我们对数据获取进行分析,首先看到首页
猫眼爬虫一-榜单爬取简单数据爬取,数据库存入_第1张图片
发现数据都存在dl标签下的dd标签里。
因此,我们可以采用xpath方法获取到dd标签,再获取到dd标签下数据。
代码如下:

    url='https://maoyan.com/board/4?offset='+str(i)
    head={}
    head[
        'User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'
    resp = requests.get(url,headers=head)
    print(resp.url)
    html=etree.HTML(resp.text)
    datas=html.xpath('//dl[@class="board-wrapper"]/dd')
    for data in datas:
        name=data.xpath('div/div/div/p[@class="name"]/a/text()')
        date=data.xpath('div/div/div/p[@class="releasetime"]/text()')
        score=data.xpath('div/div/div/p[@class="score"]/i/text()')

这里,我们发现score分数获取到的是一个列表

['9.', '3']

因此,我们要用join函数对该数据进行重组。

score=''.join(score)

得到

9.3

因此,就获取到了数据。用函数将数据存入mysql,即代码如下:

def insert(value):
    db = pymysql.connect("localhost", "root", "liulinxs", "testdb")

    cursor = db.cursor()
    # 'movie_name,movie_date,movies_make,movie_type,movie_rate,movie_num,movie_income,movie_director,movie_actors'
    sql = "INSERT INTO moviescore(name,date,score) VALUES (%s,%s,%s)"
    try:
        cursor.execute(sql, value)
        db.commit()
        print('插入数据成功')
    except:
        db.rollback()
        print("插入数据失败")
    db.close()

运行之后,就发现数据库里面数据已经存入:
猫眼爬虫一-榜单爬取简单数据爬取,数据库存入_第2张图片
爬虫完成。下面是完整代码

import requests
import pymysql
from lxml import etree

def get_data(i):
    url='https://maoyan.com/board/4?offset='+str(i)
    head={}
    head[
        'User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'
    resp = requests.get(url,headers=head)
    print(resp.url)
    html=etree.HTML(resp.text)
    datas=html.xpath('//dl[@class="board-wrapper"]/dd')
    for data in datas:
        name=data.xpath('div/div/div/p[@class="name"]/a/text()')
        date=data.xpath('div/div/div/p[@class="releasetime"]/text()')
        score=data.xpath('div/div/div/p[@class="score"]/i/text()')
        print(score)
        score=''.join(score)
        #备注 写
        print(score)

        list1=(name,date,score)
        insert(list1)
def insert(value):
    db = pymysql.connect("localhost", "root", "liulinxs", "testdb")

    cursor = db.cursor()
    # 'movie_name,movie_date,movies_make,movie_type,movie_rate,movie_num,movie_income,movie_director,movie_actors'
    sql = "INSERT INTO moviescore(name,date,score) VALUES (%s,%s,%s)"
    try:
        cursor.execute(sql, value)
        db.commit()
        print('插入数据成功')
    except:
        db.rollback()
        print("插入数据失败")
    db.close()

def main():
    for i in range(10):
        get_data(i*10)
        # yield get_data(i*10)
        print('已经获取到了%d页数据'%i)

main()

欢迎大家关注我的公众号 python学习号
猫眼爬虫一-榜单爬取简单数据爬取,数据库存入_第3张图片与大家分享爬虫与数据分析相关的信息。谢谢

你可能感兴趣的:(爬虫,数据库)