python (抓取豆瓣電影TOP250并保存到MySQL)

? ? ?首先筆者也才剛剛接觸python這門奇幻的語(yǔ)言硕淑。python是一個(gè)門檻很低的入門語(yǔ)言,但它的作用一點(diǎn)也不小。YouTube和豆瓣就是用python來(lái)寫的!

筆者將自己的所學(xué)的東西放在這里希望和讀者一起討論尉姨,一起進(jìn)步。

首先吗冤,筆者非常喜歡看電影又厉,然后就上網(wǎng)搜豆瓣電影top250.一共250部,都是非常好看的也經(jīng)典的電影椎瘟。筆者也是一部部在補(bǔ)覆致,感覺人生快要圓滿了!


好了降传,接下來(lái)我們嘗試用python抓取.筆者只想抓取著250部的電影的名字和導(dǎo)演主演的名字和一些簡(jiǎn)介并保存到本地的MySQL數(shù)據(jù)中篷朵。

首先勾怒,筆者喜歡用第三方庫(kù)reuquests,而不是python自帶urllib2(這個(gè)看個(gè)人意愿了)

如果沒有requests庫(kù)的話婆排,可以進(jìn)去cmd命令下:

pip install requests

或者

easy_install requests

或者直接下載文件解壓到python目錄下的lib/site-package中。

#!/usr/bin/env python

#-*-coding: utf-8-*-

import requests

url='https://movie.douban.com/top250'

headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36'}

html=requests.get(url,headers=headers)

print html.text

就這么簡(jiǎn)單的幾行代碼我們就已經(jīng)抓取到當(dāng)前頁(yè)面下的HTML啦笔链。

這里的User-Agent是模擬瀏覽器的信息段只,不然可能豆瓣會(huì)不給你進(jìn)行抓取哦。


然后鉴扫,我們就在就抓取關(guān)鍵信息啦赞枕,F(xiàn)12或者鼠標(biāo)右鍵審查元素功能。


審查頁(yè)面的左上角有個(gè)快速定位關(guān)鍵信息的小箭頭。


筆者接下來(lái)使用XPATH來(lái)進(jìn)行抓取炕婶,這里不進(jìn)行多余的解釋了姐赡,有興趣的小伙伴可以去網(wǎng)上搜一下XPath的下載和教程。

#!/usr/bin/env python

#-*-coding: utf-8-*-

import requests

from lxml import etree

url='https://movie.douban.com/top250'

headers={

'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36'}

html=requests.get(url,headers=headers)

selector=etree.HTML(html.text)

names=selector.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[1]/a/span[1]/text()')

others=selector.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[2]/p[1]/text()')

nums=selector.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[2]/div/span[2]/text()')

evaluates=selector.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[2]/div/span[4]/text()')

briefs=selector.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[2]/p[2]/span/text()')

for name,other,num,evaluate,brief in zip(names,others,nums,evaluates,briefs):

print name.encode("utf-8")

print other.encode("utf-8")

print num.encode("utf-8")

printevaluate.encode("utf-8")

print brief.encode("utf-8")

請(qǐng)讀者注意柠掂,將結(jié)果打印出來(lái)的時(shí)候還是要將格式換成utf-8不然還是XML的格式项滑。


這是截圖的一部分。好了涯贞。我們之前的只是一個(gè)頁(yè)面上25部電影的信息枪狂,其他的跟這個(gè)就差不多啦,寫個(gè)href函數(shù)加進(jìn)去就好了宋渔,詳細(xì)見下代碼州疾。

#!/usr/bin/env python

#-*-coding: utf-8-*-

import requests

from lxml import etree

def get_url(url):

? ? url=url

? ? headers={

? ? 'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like ? ? Gecko) Chrome/44.0.2403.157 Safari/537.36'}

? ? html=requests.get(url,headers=headers)

? ? selector=etree.HTML(html.text)

? ? hrefs=selector.xpath('//*[@id="content"]/div/div[1]/div[2]/a/@href')

for href in hrefs:

? ? string=url+href

? ? get_string(string)

defget_string(string):

? ? headers={

? ? 'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36'}

? ? html=requests.get(string,headers=headers)

? ? selector=etree.HTML(html.text)

? ? names=selector.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[1]/a/span[1]/text()')

? ? others=selector.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[2]/p[1]/text()')

? ? nums=selector.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[2]/div/span[2]/text()')

? ? evaluates=selector.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[2]/div/span[4]/text()')

? ? briefs=selector.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[2]/p[2]/span/text()')

for name,other,num,evaluate,brief in zip(names,others,nums,evaluates,briefs):

? ? print name.encode("utf-8")

? ? print other.encode("utf-8")

? ? print num.encode("utf-8")

? ? print evaluate.encode("utf-8") ?

? ? print brief.encode("utf-8")

get_url('https://movie.douban.com/top250')




250部的信息已經(jīng)抓取下來(lái)啦』始穑看看右邊導(dǎo)航條严蓖。

接下來(lái)就是寫進(jìn)數(shù)據(jù)庫(kù)啦。我們要導(dǎo)入MySQLdb這個(gè)包氧急。這個(gè)第三方庫(kù)教程也請(qǐng)讀者自行搜索啦谈飒。因?yàn)楣P者是Mac下的MySQL當(dāng)初安裝這些可是花了好大功夫呢。Windows就簡(jiǎn)單很多呢态蒂。當(dāng)然了筆者是一開始就在數(shù)據(jù)庫(kù)寫入table啦杭措。詳見以下代碼。

#!/usr/bin/env python

#-*-coding: utf-8-*-

import requests

from lxml import etree

import MySQLdb

def get_url(url):

? ? url=url

? ? headers={

? ? 'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36'}

? ? html=requests.get(url,headers=headers)

? ? selector=etree.HTML(html.text)

? ? hrefs=selector.xpath('//*[@id="content"]/div/div[1]/div[2]/a/@href')

for href in hrefs:

? ? string=url+href

? ?get_string(string)

def get_string(string):

? ? headers={

'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36'}

? ? html=requests.get(string,headers=headers)

? ? selector=etree.HTML(html.text)

? ? names=selector.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[1]/a/span[1]/text()')

? ? others=selector.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[2]/p[1]/text()')

? ? nums=selector.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[2]/div/span[2]/text()')

? ? evaluates=selector.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[2]/div/span[4]/text()')

? ? briefs=selector.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[2]/p[2]/span/text()')

for name,other,num,evaluate,briefinzip(names,others,nums,evaluates,briefs):

? ? db=MySQLdb.connect("localhost","root","guanguan5208","dh",charset="utf8")

? ? cursor=db.cursor()

? ? sql="insert into douban (name,other,num,evaluate,brief) values ('%s','%s','%s','%s','%s')"%(name.encode('utf8'),other.encode('utf8'),num.encode('utf8'),evaluate.encode('utf8'),brief.encode('utf8'))

? ? cursor.execute(sql)

? ? db.commit()

? ? db.close()

get_url('https://movie.douban.com/top250')

已經(jīng)打工搞成啦钾恢,我們?nèi)?shù)據(jù)庫(kù)看一下手素。


已經(jīng)導(dǎo)入數(shù)據(jù)里面啦。好開心呀瘩蚪,就根據(jù)這個(gè)順序慢慢來(lái)看啦泉懦。

當(dāng)然了,筆者也是剛剛接觸python這門語(yǔ)言疹瘦,很多東西還不是很懂崩哩,希望讀者輕噴,我也是抱著學(xué)習(xí)的心態(tài)來(lái)學(xué)習(xí)的??言沐。

如果這其中也什么錯(cuò)誤的地方邓嘹,請(qǐng)讀者指正,我將第一時(shí)間修改险胰。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末汹押,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子起便,更是在濱河造成了極大的恐慌棚贾,老刑警劉巖窖维,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異妙痹,居然都是意外死亡铸史,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門怯伊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)沛贪,“玉大人,你說(shuō)我怎么就攤上這事震贵±常” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵猩系,是天一觀的道長(zhǎng)媚送。 經(jīng)常有香客問我,道長(zhǎng)寇甸,這世上最難降的妖魔是什么塘偎? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮拿霉,結(jié)果婚禮上吟秩,老公的妹妹穿的比我還像新娘。我一直安慰自己绽淘,他們只是感情好涵防,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著沪铭,像睡著了一般壮池。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上杀怠,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天椰憋,我揣著相機(jī)與錄音,去河邊找鬼赔退。 笑死橙依,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的硕旗。 我是一名探鬼主播窗骑,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼卵渴!你這毒婦竟也來(lái)了慧域?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤浪读,失蹤者是張志新(化名)和其女友劉穎昔榴,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體碘橘,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡互订,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了痘拆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仰禽。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖纺蛆,靈堂內(nèi)的尸體忽然破棺而出吐葵,到底是詐尸還是另有隱情,我是刑警寧澤桥氏,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布温峭,位于F島的核電站,受9級(jí)特大地震影響字支,放射性物質(zhì)發(fā)生泄漏凤藏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一堕伪、第九天 我趴在偏房一處隱蔽的房頂上張望揖庄。 院中可真熱鬧,春花似錦欠雌、人聲如沸蹄梢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)检号。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間顷霹,已是汗流浹背誉券。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留凹蜂,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓阁危,卻偏偏與公主長(zhǎng)得像玛痊,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子狂打,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容