python爬取豆瓣Top250電影導入csv和MySQL中

1. 準備工作

  最近在寫畢業課設,需要一些電影的信息,所以網上找了一些代碼自己做了修改。在爬取之前先在你的數據庫建立movie表,以下是我自己建的表,你可以根據自己需求設計字段。
在這裏插入圖片描述
細心的網友會發現字段paihang爲啥不用rank顯得高大尚一點,我也想用,但是在插入數據的時候會插入不成功,然後把字段改成paihang就竟然插入成功了。這個奇葩的錯誤我剛開始以爲表的字段太多了,發現只要改名就行了。如果有知道原因的網友,希望可以在我的評論區留言。

2. 測試數據庫是否能插入數據

有了數據庫表格後,你需要測試一下你的表是否能插入數據。

def test_SQinsert():
	db = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='root', db='paper', charset='utf8')
    # 創建數據庫遊標
    cursor = db.cursor()
    sql = "INSERT INTO movie(name,id,actor,gener,country,release_data,rate,paihang,comment) \
           VALUES ('%s','%s','%s','%s','%s','%s','%f','%d','%d')" % \
           ('Mac', 'Mo22222', 'Mohan', 'Mohan', 'Mohan', 'dd',  1.2, 99,88)
    try:
       # 執行sql語句
       cursor.execute(sql)
       db.commit()
       print("insert ok")
    except pymysql.Error as e:
       # 發生錯誤時回滾
       db.rollback()
       print('no OK')
       # 打印錯誤
       print(e)

3. python爬蟲

# coding:utf-8
import csv
import requests
from lxml import html
from lxml import etree
from urllib.request import urlopen,Request
import pymysql

def list_douban_top250():
    db = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='lin936144524', db='paper', charset='utf8')
    # 創建數據庫遊標
    cursor = db.cursor()

    #創建CSV文件,並寫入表頭信息
    fp = open('movie.csv','a',newline='',encoding='utf-8')
    writer = csv.writer(fp)
    writer.writerow(('movie_id','電影名','電影類型','導演演員信息','發行日期','製片國家','評分','評論數','排名'))

    print('正在獲取豆瓣TOP250影片信息並存入數據庫...')
    index = 1
    page_count = 10
    all_link = []
    for i in range(page_count):
        url = 'https://movie.douban.com/top250?start={}&filter='.format(i * 25)
        # 模擬瀏覽器訪問
        headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36",}
        ret = Request(url, headers=headers)
        res = urlopen(ret)
        # 內容節點
        doc = etree.HTML(res.read())
        
        # 獲取電影鏈接作爲movie表格id
        url_list=doc.xpath('//div[@class="pic"]/a/@href')
        for url in url_list:
            if 'https://movie.douban.com/subject/' in str(url):
                all_link.append(url)

        for y in doc.xpath('//div[@class="info"]'):
            # 影片名稱
            name = y.xpath('div[@class="hd"]/a/span[@class="title"]/text()')[0]
            # 影片詳情
            move_content = y.xpath('div[@class="bd"]/p[1]/text()')
            # 導演演員信息
            actor = move_content[0].replace(" ", "").replace("\n", "").replace("\xa0","")
            # 上映日期
            date = move_content[1].replace(" ", "").replace("\n", "").replace("\xa0","").split("/")[0]
            # 製片國家
            country = move_content[1].replace(" ", "").replace("\n", "").replace("\xa0","").split("/")[1]
            # 影片類型
            gener = move_content[1].replace(" ", "").replace("\n", "").replace("\xa0","").split("/")[2]
            # 評分
            rate = y.xpath('div[@class="bd"]/div[@class="star"]/span[2]/text()')[0]
            # 評論人數
            com_count = y.xpath('div[@class="bd"]/div[@class="star"]/span[4]/text()')[0].replace('人評價', '')

            # 執行log
            print('TOP%s--%s--評分%s--人數%s' % (str(index), name, rate, com_count))
            
            # 寫入csv
            writer.writerow((all_link[index-1],name,gener,actor,date,country,rate,com_count,index))

            # 寫入MySQL
            sql = "INSERT INTO movie(id,name,gener,actor,release_data,country,rate,comment,paihang) \
            VALUES ('%s','%s','%s','%s','%s','%s','%f','%d','%d')"% \
            (all_link[index-1],str(name),str(gener),str(actor),str(date),str(country),round(float(rate),1),int(com_count),index)
            try:
                cursor.execute(sql)
                db.commit()
                print("結果已提交")
            except pymysql.Error as e:
                db.rollback()
                print("數據已回滾",e)
            index += 1
    print('任務執行完成!')
    cursor.close()
    db.close()
    fp.close()

list_douban_top250()

4. 結果顯示

  • csv
    打開會發現是亂碼,用文本文檔打開,改一下編碼格式爲ANSI就可以了。
    在這裏插入圖片描述
  • movie表
    在這裏插入圖片描述

5. 參考文獻

  • https://www.jianshu.com/p/e49bdec40cac
  • https://www.bbsmax.com/A/l1dybyM9ze/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章