成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

爬蟲+網(wǎng)站開發(fā)實(shí)例:電影票比價(jià)網(wǎng)

Codeing_ls / 2837人閱讀

摘要:注一篇去年的舊文,發(fā)現(xiàn)沒在知乎發(fā)過,過來補(bǔ)個(gè)檔。于是就有了我們這個(gè)小項(xiàng)目電影票比價(jià)網(wǎng)在我們這個(gè)網(wǎng)頁上,會展示出當(dāng)前熱映的電影。涉及到模塊主要是用來匹配不同渠道的影院信息代碼結(jié)構(gòu)項(xiàng)目主要有三塊使用豆瓣每日更新上映的影片列表。

注:一篇去年的舊文,發(fā)現(xiàn)沒在知乎發(fā)過,過來補(bǔ)個(gè)檔。有個(gè)小問題是項(xiàng)目中淘票票的網(wǎng)頁反爬提升且變動較多,目前暫不可用了。

時(shí)常有同學(xué)會問我類似的問題:我已經(jīng)學(xué)完了 Python 基礎(chǔ),也照著例子寫過一點(diǎn)爬蟲代碼 / 了解過 django 的入門項(xiàng)目 / 看過數(shù)據(jù)分析的教程……然后就不知道要做什么了。接下來應(yīng)該 如何繼續(xù)提升編程能力呢

我的答案很簡單:

做項(xiàng)目

不要把“項(xiàng)目”想象得太復(fù)雜,覺得一定是那種收錢開發(fā)的才能稱作項(xiàng)目(如果有這種項(xiàng)目當(dāng)然會更好)。對于剛剛跨入編程世界的你來說,任何一個(gè)小項(xiàng)目都是好的開始。你所需要的,就是 一雙發(fā)現(xiàn)問題的眼睛 。生活中工作中的一些小事情小麻煩,多想一步,是不是可以寫一小段代碼來解決。

一開始,或許你的解決方案很笨拙,很復(fù)雜,本來5分鐘就能搞定的事情,你寫代碼卻花了一個(gè)小時(shí)。但對你來說,此時(shí)的目的并不只是解決問題,而是這個(gè)過程本身。 在折騰的過程中,你的經(jīng)驗(yàn)才會增長 。這是你單純看教程所無法達(dá)到的,再好的教程也替代不了動手。(有時(shí)候會有人評論說,這功能直接用xxx就可以了,干嘛還要自己寫代碼。對此我不做評價(jià),因?yàn)槲抑浪皇莵韺W(xué)編程的。)

我們編程教室也陸續(xù)提供了一些項(xiàng)目案例。你可以參考我們的示例代碼,或者更好的是,自己去思考一個(gè)解決方案并實(shí)現(xiàn)。我們的案例不少都放在了網(wǎng)站 http:// lab.crossincode.com 上演示,歡迎大家去瀏覽。內(nèi)容會持續(xù)更新,可留意我們微信公眾號和知乎專欄里的文章。

今天介紹的這個(gè)項(xiàng)目就源自生活中的一個(gè)場景: 買電影票 。

當(dāng)你打算周末出門看場電影的時(shí)候,就必然面臨三個(gè)終極問題:

看什么?

什么時(shí)候看?

去哪兒看?

通常你只需要打開常用的購票App,選一部最近口碑不錯(cuò)的片子,去熟悉的影院看看有哪些場次就可以了。但有時(shí)你也會發(fā)現(xiàn),同樣一部電影,不遠(yuǎn)的兩家影院,價(jià)格就差很多,不同的購票App也會因?yàn)榇黉N活動之類有不同的優(yōu)惠力度,一張票可能會相差幾十元。但如果每次都去幾個(gè)App把最近的排片和價(jià)格都瀏覽一遍,那也太麻煩了。于是就有了我們這個(gè)小項(xiàng)目:

電影票比價(jià)網(wǎng)

在我們這個(gè)網(wǎng)頁上,會展示出當(dāng)前熱映的電影。進(jìn)入每部電影,選擇 城市區(qū)域 、 影院日期 ,就可以看到最近的 排片時(shí)間 和不同渠道的 價(jià)格 。目前,我們是從 糯米淘票票時(shí)光網(wǎng) 三個(gè)渠道獲取價(jià)格來做演示。(注:項(xiàng)目中淘票票現(xiàn)已失效)

實(shí)現(xiàn)技術(shù)

本項(xiàng)目是對爬蟲和Web網(wǎng)站的綜合運(yùn)用,適合已經(jīng)有掌握python基礎(chǔ),并且對此有一些了解的同學(xué)作為練手項(xiàng)目。涉及到模塊主要是:

Django(1.10)

requests

bs4

python-Levenshtein(用來匹配不同渠道的影院信息)

代碼結(jié)構(gòu)

項(xiàng)目主要有三塊:

douban_movie

使用豆瓣 api 每日更新上映的影片列表。

movie_tickets

項(xiàng)目的核心部分,用來處理影院信息和排名信息的抓取。

django

項(xiàng)目本身是一個(gè)網(wǎng)站,整體是在 django 的框架之中。

開發(fā)思路

使用爬蟲爬取各電影票網(wǎng)站所有的電影院鏈接,作為基本的數(shù)據(jù)保存下來

使用豆瓣 API 獲取當(dāng)日上映的電影信息,并每天更新

django 顯示電影信息,提供給用戶選擇電影院的接口

將影片和影院信息發(fā)送到 django 后臺進(jìn)行查詢,爬取對應(yīng)的排片信息顯示給用戶

代碼片段

 # 獲取淘票票某地區(qū)某電影院某影片價(jià)格# 
1. 根據(jù)查詢條件獲取影院 id# 
2. 根據(jù)影院 id 獲取該影院正在上映電影# 
3. 獲取 查詢電影的排片時(shí)間表鏈接# 
4. 拿到價(jià)格
def get_movie_tickets(self, *args):
    assert len(args) == 4, "not enough parameters 
 type in -h for help"
    movie_name = args[3]
    mt = TaoppDt()
    cinema_url = mt.search(*args[:3])
    assert cinema_url, "未查詢到該電影院"
    pattern = re.compile(r"cinemaId=(d+)")
    cinemaid = re.findall(pattern, cinema_url)[0]
    film_url = "https://dianying.taobao.com/cinemaDetailSchedule.htm?cinemaId=" + str(cinemaid)
    content = self.rq.req_url(film_url)
    assert content, "請求失敗,請檢查 /utils/req.py 中 req_url 函數(shù)是否工作正常"
    soup = bs4.BeautifulSoup(content, "lxml")
    soup_film = soup.find("a", text=re.compile(movie_name))
    assert soup_film, "未查詢到該電影"
    film_param = soup_film["data-param"]
    return self._get_ticket_info(film_param)

其他說明

項(xiàng)目為了有一個(gè)較好的交互效果,在頁面上用到了不少 Ajax 請求。這需要有一定的前端 js 基礎(chǔ)。對網(wǎng)頁前端不熟悉的同學(xué)可暫且略過,重點(diǎn)關(guān)注后端實(shí)現(xiàn)。

不同渠道對于同一家影院的名稱很可能有出入,因此這里使用了 python-Levenshtein 來對文本進(jìn)行匹配。

代碼里在抓取時(shí)有用到我們的另一個(gè)項(xiàng)目: IP代理池 (參見 Crossin:聽說你好不容易寫了個(gè)爬蟲,結(jié)果沒抓幾個(gè)就被封了?)。但因?yàn)榉?wù)器資源有限,有時(shí)拿不到可用的代理。各位自己電腦上運(yùn)行代碼時(shí),可嘗試把 requests 的 proxies 參數(shù)去除。

作為一個(gè)演示項(xiàng)目,必然存在一些bug(當(dāng)然商業(yè)項(xiàng)目也不可能沒有bug),加上爬蟲的程序極有可能因?yàn)閷Ψ骄W(wǎng)站更新而失效。所以如果遇到問題,歡迎大家給我們報(bào)錯(cuò)。

代碼下載

完整的代碼詳細(xì)代碼說明 已上傳 Github,獲取下載地址請?jiān)?公眾號(Crossin的編程教室) 里回復(fù) 電影票

════

其他文章及回答:

學(xué)編程:如何自學(xué)Python | 新手引導(dǎo) | 一圖學(xué)Python

開發(fā)案例:智能防擋彈幕 | 紅包提醒 | 流浪地球

歡迎搜索及關(guān)注: Crossin的編程教室

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/43305.html

相關(guān)文章

  • BeautifulSoup:網(wǎng)頁解析利器上手簡介

    摘要:文檔寫得很清楚,也有中文版,你只要看了最初的一小部分,就可以在代碼中派上用場了。 關(guān)于爬蟲的案例和方法,我們已講過許多。不過在以往的文章中,大多是關(guān)注在 如何把網(wǎng)頁上的內(nèi)容抓取下來 。今天我們來分享下,當(dāng)你已經(jīng)把內(nèi)容爬下來之后, 如何提取出其中你需要的具體信息 。 網(wǎng)頁被抓取下來,通常就是 str 字符串類型的對象 ,要從里面尋找信息,最直接的想法就是直接通過字符串的 find 方法 ...

    Carl 評論0 收藏0
  • 這可能是我用過最“強(qiáng)大”的API:Marvel API

    我們在編程教室中寫過不少使用 API 開放接口 的案例,比如: 查詢書影音的 豆瓣 (爬蟲+網(wǎng)站開發(fā)實(shí)例:電影票比價(jià)網(wǎng)) 查詢股票的 tushare (想用 Python 做數(shù)據(jù)分析?先玩玩這個(gè)再說) 翻譯單詞的 詞霸 (【每周一坑解答】自動翻譯) 用來做人工智能的 騰訊AI (調(diào)教屬于你的賈維斯) 但以上這些都不是我今天要說的。今天要說的這個(gè)接口,之所以稱為強(qiáng)大,因?yàn)?它返回的內(nèi)容里蘊(yùn)含了未...

    Near_Li 評論0 收藏0
  • 爬蟲入門

    摘要:通用網(wǎng)絡(luò)爬蟲通用網(wǎng)絡(luò)爬蟲又稱全網(wǎng)爬蟲,爬取對象從一些種子擴(kuò)充到整個(gè)。為提高工作效率,通用網(wǎng)絡(luò)爬蟲會采取一定的爬取策略。介紹是一個(gè)國人編寫的強(qiáng)大的網(wǎng)絡(luò)爬蟲系統(tǒng)并帶有強(qiáng)大的。 爬蟲 簡單的說網(wǎng)絡(luò)爬蟲(Web crawler)也叫做網(wǎng)絡(luò)鏟(Web scraper)、網(wǎng)絡(luò)蜘蛛(Web spider),其行為一般是先爬到對應(yīng)的網(wǎng)頁上,再把需要的信息鏟下來。 分類 網(wǎng)絡(luò)爬蟲按照系統(tǒng)結(jié)構(gòu)和實(shí)現(xiàn)技術(shù),...

    defcon 評論0 收藏0
  • 爬蟲入門

    摘要:通用網(wǎng)絡(luò)爬蟲通用網(wǎng)絡(luò)爬蟲又稱全網(wǎng)爬蟲,爬取對象從一些種子擴(kuò)充到整個(gè)。為提高工作效率,通用網(wǎng)絡(luò)爬蟲會采取一定的爬取策略。介紹是一個(gè)國人編寫的強(qiáng)大的網(wǎng)絡(luò)爬蟲系統(tǒng)并帶有強(qiáng)大的。 爬蟲 簡單的說網(wǎng)絡(luò)爬蟲(Web crawler)也叫做網(wǎng)絡(luò)鏟(Web scraper)、網(wǎng)絡(luò)蜘蛛(Web spider),其行為一般是先爬到對應(yīng)的網(wǎng)頁上,再把需要的信息鏟下來。 分類 網(wǎng)絡(luò)爬蟲按照系統(tǒng)結(jié)構(gòu)和實(shí)現(xiàn)技術(shù),...

    Invoker 評論0 收藏0
  • Python 爬蟲-模擬登錄知乎-爬取拉勾網(wǎng)職位信息

    摘要:本文代碼地址爬取豆瓣電影爬取拉勾網(wǎng)職位信息模擬登陸知乎為什么沒人給我點(diǎn)贊。職位名職位信息運(yùn)行結(jié)果模擬登錄知乎通過開發(fā)者工具,獲取的數(shù)據(jù)。 我開通了公眾號【智能制造專欄】,以后技術(shù)類文章會發(fā)在專欄。用Python寫爬蟲是很方便的,最近看了xlzd.me的文章,他的文章寫的很到位,提供了很好的思路。因?yàn)樗奈恼虏糠执a省略了。下面是基于他的文章的三個(gè)代碼片段:基于Python3,Pytho...

    joyvw 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<