日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

python爬蟲貓眼電影TOP100(爬蟲入門基礎,同步入庫)

系統 2181 0

小編輾轉了比較長的一段時間,現在終于提筆于python的運用,這次嘗試也是一個開端。

本篇文章所爬取的數據網上已經有了很多版本,并不是什么新鮮的數據,僅僅作為個人進階的參考。

python爬蟲進階第S190811期

python爬蟲將會進一步深入到JavaScript渲染網頁(動態渲染)、驗證碼識別、代理設置、cookies池搭建等,有興趣的同道中人可以持續關注哈。

本次嘗試爬取小量電影數據并同步存入數據庫作為預熱哈。

下面代碼分為三塊:請求、解析網頁的模塊;網頁數據獲取模塊;數據同步入庫模塊

            
              #需要用到的包載入
import requests
from  requests.exceptions  import RequestException
import lxml
from lxml import etree
import pymysql
import time



#定義headers,請求網頁并獲取網頁響應狀態,解析網頁,設置休眠時間,防止封禁,當然如此小的數據量不存在的
def main():
    url = 'http://maoyan.com/board/4?offset='
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT k0.0; Win64; x64)             AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.kk0 Safari/537.36'}
    for i in range(10):
        my_url=url+str(10*i)
        url_response = requests.get(my_url,headers=headers)
        html_analysis = etree.HTML(url_response.text)
        md=[]
        get_data(html_analysis,md)
        insert_sql(md)
        time.sleep(1)



#利用lxml庫xpath獲取網頁數據
def get_data(html_analysis,md):
#電影名稱
    name=html_analysis.xpath("http://div[@class='movie-item-info']/p/a/@title")
#電影主演,里面的人有多個,沒有進行拆分,有需要可以進行拆分
    actor=html_analysis.xpath("http://div[@class='movie-item-info']/p[@class='star']/text()")
#電影上映時間
    time=html_analysis.xpath("http://div[@class='movie-item-info']/p[@class='releasetime']/text()")
#電影評分(整數部分)
    score_int=html_analysis.xpath("http://div[@class='board-item-content']/div[contains(@class,'movie-item-number')]/p[@class='score']/i[@class='integer']/text()")
#電影評分(小數部分)
    score_float=html_analysis.xpath("http://div[@class='board-item-content']/div[contains(@class,'movie-item-number')]/p[@class='score']/i[@class='fraction']/text()")
#電影封面地址,沒有下載,只是獲取了地址,根據需求可以下載了存儲
    img=html_analysis.xpath("http://a/img/@src")
#拼接電影評分
    score=[]
    for j in range(0,len(score_int)):
        score.append(score_int[j]+score_float[j])
#整合每頁數據,構造循環,用append函數實現
    for k in range(0,len(name)):
        movie_name=name[k].strip()
        movie_actor=actor[k].strip()
        movie_time=time[k].strip()
        movie_score=score[k].strip()
        movie_img=img[k].strip()
        md.append([movie_name,movie_actor,movie_time,movie_score,movie_img])


#連接數據庫,創建對應數據庫的電影數據存儲表,便于數據爬取后存入
db=pymysql.connect(host='localhost', user='root', password='密碼', port=3306,db='數據庫')
cursor = db.cursor()
#創建電影數據存儲表的語句用游標寫,若已經存在創建的表則不會重復創建,當然這個表的參數設置是有些不合理的哈
sql_create='create table if not exists my_movie_data(id int auto_increment primary key,' \
           'movie_name varchar(255) not null,' \
            'movie_actor varchar(255) not null,' \
            'movie_time varchar(255) not null,' \
            'movie_score varchar(255) not null,' \
            'movie_img varchar(255) not null )'
cursor.execute(sql_create)
db.close()




#數據同步入庫
def insert_sql(data):
    db = pymysql.connect(host='localhost',
                             user='root',
                             password='密碼',
                             port=3306,
                             db='數據庫')
    cur = db.cursor()
    for i in data:
        my_data=i
#用格式化符%s來避免插入數據字符拼接的問題,value值用統一的元組來傳遞避免出錯
        sql = 'insert into my_movie_data(movie_name,movie_actor,movie_time,movie_score,movie_img) values(%s,%s,%s,%s,%s)'
#用游標把數據同步入庫,當發生錯誤時候便會回滾,取消錯誤插入
        try:
            cur.execute(sql,my_data)
            db.commit()
            print('貓眼電影數據正在入庫')
        except:
                db.rollback()
                print('貓眼電影數據入庫失敗')
    cur.close()
    db.close()

#模塊調用,當name與main一致時候,在本腳本運行時候name=main,輸出本腳本的結果;在其他腳本運行時候name!=main,若在其他腳本中調用模塊則輸出其他腳本的結果,不會執行main模塊
if __name__== "__main__":
    main()

            
          

電影數據入庫(mysql)截圖:

python爬蟲貓眼電影TOP100(爬蟲入門基礎,同步入庫)_第1張圖片

下一篇可能是貓眼電影2.8w+經典電影數據

Any questions or doubts here,call me please,together to work it out.

歡迎關注小編微信公眾號:分享百科 松子?

python爬蟲貓眼電影TOP100(爬蟲入門基礎,同步入庫)_第2張圖片


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 仪征市| 兴海县| 获嘉县| 达拉特旗| 嘉峪关市| 杨浦区| 大姚县| 德钦县| 五指山市| 论坛| 黄龙县| 东莞市| 武川县| 浪卡子县| 东兴市| 武安市| 呈贡县| 宁安市| 昂仁县| 宁河县| 河南省| 固原市| 盐池县| 盖州市| 日照市| 韶关市| 通渭县| 贡山| 娄烦县| 盖州市| 淮安市| 阿城市| 盘锦市| 塔城市| 山阳县| 界首市| 故城县| 日土县| 牙克石市| 汶川县| 巨野县|