python爬蟲--爬取某網站電影資訊並寫入mysql資料庫,pythonmysql

來源:互聯網
上載者:User

python爬蟲--爬取某網站電影資訊並寫入mysql資料庫,pythonmysql

書接上文,前文最後提到將爬取的電影資訊寫入資料庫,以方便查看,今天就具體實現。

首先還是上代碼:

# -*- coding:utf-8 -*-import requestsimport reimport mysql.connector#changepage用來產生不同頁數的連結def changepage(url,total_page):    page_group = ['https://www.dygod.net/html/gndy/jddy/index.html']    for i in range(2,total_page+1):        link = re.sub('jddy/index','jddy/index_'+str(i),url,re.S)        page_group.append(link)    return page_group#pagelink用來產生頁面內的視頻連結頁面def pagelink(url):    base_url = 'https://www.dygod.net/html/gndy/jddy/'    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'}    req = requests.get(url , headers = headers)    req.encoding = 'gbk'#指定編碼,否則會亂碼    pat = re.compile('<a href="/html/gndy/jddy/(.*?)" class="ulink" title=(.*?)/a>',re.S)#擷取電影列表網址    reslist = re.findall(pat, req.text)    finalurl = []    for i in range(1,25):        xurl = reslist[i][0]        finalurl.append(base_url + xurl)    return finalurl #返回該頁面內所有的視頻網頁地址#getdownurl擷取頁面的視頻地址和資訊def getdownurl(url):    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'}    req = requests.get(url , headers = headers)    req.encoding = 'gbk'#指定編碼,否則會亂碼        pat = re.compile('<a href="ftp(.*?)">ftp',re.S)#擷取    reslist = re.findall(pat, req.text)    furl = 'ftp'+reslist[0]        pat2 = re.compile('<!--Content Start-->(.*?)<!--duguPlayList Start-->',re.S)#擷取影片資訊    reslist2 = re.findall(pat2, req.text)    reslist3 = re.sub('[<p></p>]','',reslist2[0])    fdetail = reslist3.split('◎')        return (furl,fdetail)    #建立表moviesdef createtable(con,cs):    #建立movies表,確定其表結構:    cs.execute('create table if not exists movies (film_addr varchar(1000), cover_pic varchar(1000), name varchar(100) primary key,\     ori_name varchar(100),prod_year varchar(100), prod_country varchar(100), category varchar(100), language varchar(100), \     subtitle varchar(100), release_date varchar(100), score varchar(100), file_format varchar(100), video_size varchar(100), \     file_size varchar(100), film_length varchar(100), director varchar(100), actors varchar(500), profile varchar(2000),capt_pic varchar(1000))')    # 提交事務:    con.commit()        #將電影地址和簡介插入表中def inserttable(con,cs,x,y):    try:        cs.execute('insert into movies values (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)',\    (x,y[0],y[1],y[2],y[3],y[4],y[5],y[6],y[7],y[8],y[9],y[10],y[11],y[12],y[13],y[14],y[15],y[16],y[17]))    except:        pass    finally:        con.commit()        if __name__ == "__main__" :    html = "https://www.dygod.net/html/gndy/jddy/index.html"    print('你即將爬取的網站是:https://www.dygod.net/html/gndy/jddy/index.html')    pages = input('請輸入需要爬取的頁數:')    createtable    p1 = changepage(html,int(pages))        #開啟資料庫    conn = mysql.connector.connect(user='py', password='Unix_1234', database='py_test')    cursor = conn.cursor()    createtable(conn,cursor)    #插入資料    j = 0    for p1i in p1 :        j = j + 1        print('正在爬取第%d頁,網址是 %s ...'%(j,p1i))        p2 = pagelink(p1i)        for p2i in p2 :            p3,p4 = getdownurl(p2i)            if len(p3) == 0 :                pass            else :                inserttable(conn,cursor,p3,p4)    #關閉資料庫    cursor.close()    conn.close()    print('所有頁面地址爬取完畢!')

用到的知識點和前面比,最重要是多了資料庫的操作,下面簡要介紹下python如何串連資料庫。

一、python中使用mysql需要驅動,常用的有官方的mysql-connect-python,還有mysqldb(Python 2.x)和pymysql(Python 3.x),這幾個模組既是驅動,又是工具,可以用來直接操作mysql資料庫,也就是說它們是通過在Python中寫sql語句來操作的,例如建立user表:

cursor.execute('create table user (id int, name varchar(20))')

#這裡的create table語句就是典型的sql語句。

二、還有很多情況下我們用ORM(object relational mapping)即對象映射關係架構,將程式設計語言的物件模型和資料庫的關聯式模式(RDBMS關係型資料庫)進行映射,這樣可以直接使用程式設計語言的物件模型操作資料庫,而不是使用sql語言。同樣建立user表:

user=Table('user',metadata,
Column('id',Integer),
Column('name', String(20))
)
metadata.create_all()
#這裡可以看到根本沒有sql語句的影子,這樣我們可以專註在Python代碼而不是sql代碼上了。(注意ORM並不包含驅動,如要使用同樣要安裝前面提到的驅動)

如有興趣可以自行學習,這不是本文的重點。為簡單起見,文中用的是mysql-connect-python。

正則匹配部分也很簡單,因為源網頁比較規則,如下網頁圖和對應的原始碼:

 

 

直接用◎匹配即可。

程式運行完後,資料都寫入movies表中。

比如我想篩選豆瓣評分>7的,

是不是很簡單,你GET到了嗎?

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.