貓眼爬蟲一-榜單爬取簡單數據爬取,數據庫存入

貓眼是一個很有影響力的電影數據分享平臺,今天,我們要對這個網站的數據進行爬取,當然了,這個只是最初級的數據爬取,後面我會對該網站的加密數據進行爬取,希望能繼續關注。
貓眼爬蟲:爬取評分前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打開查看數據表,發現存在了該數據表。
在這裏插入圖片描述
即數據表創建成功,下面,我們對數據獲取進行分析,首先看到首頁
在這裏插入圖片描述
發現數據都存在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()

運行之後,就發現數據庫裏面數據已經存入:
在這裏插入圖片描述
爬蟲完成。下面是完整代碼

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學習號
在這裏插入圖片描述與大家分享爬蟲與數據分析相關的信息。謝謝

發佈了11 篇原創文章 · 獲贊 1 · 訪問量 3347
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章