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

利用Python爬取豆瓣電影

系統(tǒng) 1700 0

目標(biāo):使用Python爬取豆瓣電影并保存MongoDB數(shù)據(jù)庫(kù)中

我們先來(lái)看一下通過(guò)瀏覽器的方式來(lái)篩選某些特定的電影:

我們把URL來(lái)復(fù)制出來(lái)分析分析:

https://movie.douban.com/tag/#/?sort=T&range=0,10&tags=%E7%94%B5%E5%BD%B1,%E7%88%B1%E6%83%85,%E7%BE%8E%E5%9B%BD,%E9%BB%91%E5%B8%AE

有3個(gè)字段是非常重要的:

  1.sort=T

  2.range=0,10

  3.tags=%E7%94%B5%E5%BD%B1,%E7%88%B1%E6%83%85,%E7%BE%8E%E5%9B%BD,%E9%BB%91%E5%B8%AE

具體分析方法如下:

  1.sort:表示排序方式,可以看到它有3中排序方式

根據(jù)上圖可以直到每個(gè)字母表示的含義:

 T:熱度排序,

    R:時(shí)間排序,

    S:評(píng)價(jià)排序:

?

  2.range=0,10;表示一個(gè)范圍,具體是什么范圍呢?

  range參數(shù)我們也搞定了,它就是表示評(píng)分區(qū)間!

    默認(rèn)評(píng)分區(qū)間是:0-10

?

  3.tags:同樣的原理,這是一個(gè)標(biāo)簽

    我們選中的標(biāo)簽有:電影,愛(ài)情,美國(guó),黑幫4個(gè)標(biāo)簽,但是在tags里面我們看到的不是這寫(xiě)漢字,而是被編碼過(guò)的形式!

    %E7%94%B5%E5%BD%B1,%E7%88%B1%E6%83%85,%E7%BE%8E%E5%9B%BD,%E9%BB%91%E5%B8%AE)

    那如何知道這些字符是表示什么呢?

  我們可以到網(wǎng)上進(jìn)行解碼看看正不正確?

?

?

  4.那么還有沒(méi)有可以選擇的參數(shù)呢?

  我們還有2個(gè)參數(shù)可以選擇!

    playbale=1:表示可播放

    unwatched=1:表示還沒(méi)看過(guò)的

至此,我們就已經(jīng)把URL中的查詢(xún)參數(shù)全都弄明白了!

?

但是,又有一個(gè)問(wèn)題了,當(dāng)我們?cè)跒g覽器中點(diǎn)擊"加載更多"按鈕時(shí),這個(gè)地址欄中的URL并沒(méi)有發(fā)生變化,但是電影信息可以加載出來(lái)了!這是為什么?

  如果知道AJAX加載技術(shù)的讀者可能知道這個(gè)原理,實(shí)際上就是異步加載,服務(wù)器不需要刷新整個(gè)網(wǎng)頁(yè),只需要刷新局部網(wǎng)頁(yè)就可以把數(shù)據(jù)展示到網(wǎng)頁(yè)中,這樣不僅可以加快速度,也可以減少服務(wù)器的壓力.

?

重點(diǎn)來(lái)了:

  抓包結(jié)果:

?

看看瀏覽器地址欄的URL與Request URL有什么不一樣的地方?

  我們?cè)跒g覽器地址欄中看到的URL是:

https://movie.douban.com/tag/#/?

      sort=S&range=5,10&tags=%E7%94%B5%E5%BD%B1,%E7%88%B1%E6%83%85,%E7%BE%8E%E5%9B%BD&playable=1&unwatched=1

  實(shí)際瀏覽器發(fā)送的Request URL是:

https://movie.douban.com/j/new_search_subjects?

sort=S&range=5,10&tags=%E7%94%B5%E5%BD%B1,%E7%88%B1%E6%83%85,%E7%BE%8E%E5%9B%BD&playable=1&unwatched=1&start=0

  除了被紅色標(biāo)記的地方不同之外,其他地方都是一樣的!那我們發(fā)送請(qǐng)求的時(shí)候應(yīng)該是用哪一個(gè)URL呢?

  在上面我就已提到了,在豆瓣電影中,是采用異步加載的方式來(lái)加載數(shù)據(jù)的,也就是說(shuō)在加載數(shù)據(jù)的過(guò)程中,地址欄中的URL是一直保持不變的,那我們還能用這個(gè)URL來(lái)發(fā)送請(qǐng)求嗎?當(dāng)然不能了!

既然不能用地址欄中的URL來(lái)發(fā)送請(qǐng)求,那我們就來(lái)分析一下瀏覽器實(shí)際發(fā)送的Request URL:

  我們把這個(gè)URL復(fù)制到瀏覽器中看看會(huì)發(fā)生什么情況!

我們可以看到這個(gè)URL的響應(yīng)結(jié)果恰恰就是我們想要的數(shù)據(jù),采用json格式.在Python中,我們可以利用一些工具把它轉(zhuǎn)換成字典格式,來(lái)提取我們想要的數(shù)據(jù).

?

距離我們成功還有一小步:

  在這個(gè)URL中,我們看到還有一個(gè)參數(shù):start,這個(gè)是干嘛的呢?

  這個(gè)數(shù)值表示偏移量,來(lái)控制每一次加載的偏移位置是在哪里!比如我們把它設(shè)置成20,表示一次請(qǐng)求的電影數(shù)量.那么得到的結(jié)果如下:

到這里,該案例的思路,難點(diǎn)就已經(jīng)全都捋清楚了,剩下的就是代碼的事情了!

?

項(xiàng)目結(jié)構(gòu):

完整的代碼如下:

利用Python爬取豆瓣電影_第1張圖片


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 宁波市| 瑞昌市| 电白县| 金寨县| 海安县| 墨脱县| 汉沽区| 浙江省| 张家川| 陆丰市| 宁津县| 九江县| 怀仁县| 平凉市| 松滋市| 公主岭市| 疏勒县| 阳谷县| 金阳县| 饶阳县| 象州县| 疏附县| 夏河县| 马公市| 化德县| 花莲县| 绍兴市| 浮梁县| 邵东县| 东方市| 南昌市| 巴林左旗| 尤溪县| 滁州市| 安义县| 鲜城| 特克斯县| 微山县| 思南县| 盐山县| 孟州市|