摘要:英文原文在上兩篇教程中,我們學(xué)習(xí)了怎么從中提取信息,也學(xué)習(xí)了怎么處理一些請求復(fù)雜的頁面。在使用之前,你需要安裝它安裝文檔。當(dāng)你安裝了之后,在運(yùn)行模式的時(shí)就會自動啟用了。使用當(dāng)連上代理后,你就能通過在中添加的參數(shù),開啟使用抓取。
英文原文:http://docs.pyspider.org/en/latest/tutorial/Render-with-PhantomJS/
在上兩篇教程中,我們學(xué)習(xí)了怎么從 HTML 中提取信息,也學(xué)習(xí)了怎么處理一些請求復(fù)雜的頁面。但是有一些頁面,它實(shí)在太復(fù)雜了,無論是分析 API 請求的地址,還是渲染時(shí)進(jìn)行了加密,讓直接抓取請求非常麻煩。這時(shí)候就是 PhantomJS 大顯身手的時(shí)候了。
在使用 PhantomJS 之前,你需要安裝它(安裝文檔)。當(dāng)你安裝了之后,在運(yùn)行 all 模式的 pyspider 時(shí)就會自動啟用了。當(dāng)然,你也可以在 demo.pyspider.org 上嘗試。
使用 PhantomJS當(dāng) pyspider 連上 PhantomJS 代理后,你就能通過在 self.crawl 中添加 fetch_type="js" 的參數(shù),開啟使用 PhantomJS 抓取。例如,在教程二中,我們嘗試抓取的 http://movie.douban.com/explore 就可以通過 PhantomJS 直接抓?。?/p>
pythonclass Handler(BaseHandler): def on_start(self): self.crawl("http://movie.douban.com/explore", fetch_type="js", callback=self.phantomjs_parser) def phantomjs_parser(self, response): return [{ "title": "".join( s for s in x("p").contents() if isinstance(s, basestring) ).strip(), "rate": x("p strong").text(), "url": x.attr.href, } for x in response.doc("a.item").items()]
在頁面上執(zhí)行自定義腳本我在這里使用了一些 PyQuery 的 API,你可以在 PyQuery complete API 獲得完整的 API 手冊。
你會發(fā)現(xiàn),在上面我們使用 PhantomJS 抓取的豆瓣熱門電影只有 20 條。當(dāng)你點(diǎn)擊『加載更多』時(shí),能獲得更多的熱門電影。為了獲得更多的電影,我們可以使用 self.crawl 的 js_script 參數(shù),在頁面上執(zhí)行一段腳本,點(diǎn)擊加載更多:
python def on_start(self): self.crawl("http://movie.douban.com/explore#more", fetch_type="js", js_script=""" function() { setTimeout("$(".more").click()", 1000); }""", callback=self.phantomjs_parser)
這個(gè)腳本默認(rèn)在頁面加載結(jié)束后執(zhí)行,你可以通過 js_run_at 參數(shù) 修改這個(gè)行為
由于是 AJAX 異步加載的,在頁面加載完成時(shí),第一頁的電影可能還沒有加載完,所以我們用 setTimeout 延遲 1 秒執(zhí)行。
你可以間隔一定時(shí)間,多次點(diǎn)擊,這樣可以加載更多頁。
由于相同 URL (實(shí)際是相同 taskid) 的任務(wù)會被去重,所以這里為 URL 加了一個(gè) #more
上面兩個(gè)例子,都可以在 http://demo.pyspider.org/debug/tutorial_douban_explore 中找到。
中文原文: http://blog.binux.me/2015/01/pyspider-tutorial-level-3-render-with-phantomjs/
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/45325.html
摘要:最近需要爬取某網(wǎng)站,無奈頁面都是渲染后生成的,普通的爬蟲框架搞不定,于是想到用搭一個(gè)代理。調(diào)用貌似沒有現(xiàn)成的第三方庫如果有,請告知小,漫步了一圈,發(fā)現(xiàn)只有提供了現(xiàn)成的方案。 最近需要爬取某網(wǎng)站,無奈頁面都是JS渲染后生成的,普通的爬蟲框架搞不定,于是想到用Phantomjs搭一個(gè)代理。 Python調(diào)用Phantomjs貌似沒有現(xiàn)成的第三方庫(如果有,請告知小2),漫步了一圈,發(fā)現(xiàn)只...
摘要:所以如果對爬蟲有一定基礎(chǔ),上手框架是一種好的選擇。缺少包,使用安裝即可缺少包,使用安裝即可上一篇文章網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)爬取相關(guān)庫的安裝的安裝下一篇文章網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)爬蟲框架的安裝 上一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---9、APP爬取相關(guān)庫的安裝:Appium的安裝下一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---11、爬蟲框架的安裝:ScrapySplash、ScrapyRedis 我們直接...
摘要:一個(gè)爬蟲框架的雛形,應(yīng)該包含調(diào)度器隊(duì)列請求對象等。我們平時(shí)寫的爬蟲程序,連最基本的框架都不具備。這樣,不僅開發(fā)效率會提高很多,而且爬蟲的健壯性也更強(qiáng)。支持多種消息隊(duì)列如。將抓取任務(wù)分發(fā)給進(jìn)行抓取,執(zhí)行并得到響應(yīng)隨后將響應(yīng)發(fā)送給。 showImg(https://segmentfault.com/img/remote/1460000015557057); 為什么要使用爬蟲框架 在我們平常...
摘要:楚江數(shù)據(jù)是專業(yè)的互聯(lián)網(wǎng)數(shù)據(jù)技術(shù)服務(wù),現(xiàn)整理出零基礎(chǔ)如何學(xué)爬蟲技術(shù)以供學(xué)習(xí),。本文來源知乎作者路人甲鏈接楚江數(shù)據(jù)提供網(wǎng)站數(shù)據(jù)采集和爬蟲軟件定制開發(fā)服務(wù),服務(wù)范圍涵蓋社交網(wǎng)絡(luò)電子商務(wù)分類信息學(xué)術(shù)研究等。 楚江數(shù)據(jù)是專業(yè)的互聯(lián)網(wǎng)數(shù)據(jù)技術(shù)服務(wù),現(xiàn)整理出零基礎(chǔ)如何學(xué)爬蟲技術(shù)以供學(xué)習(xí),http://www.chujiangdata.com。 第一:Python爬蟲學(xué)習(xí)系列教程(來源于某博主:htt...
摘要:現(xiàn)在我們用一個(gè)實(shí)戰(zhàn)項(xiàng)目,來進(jìn)一步掌握框架的使用。此次的項(xiàng)目爬取的目標(biāo)是去哪兒網(wǎng),我要將所有攻略的作者標(biāo)題出發(fā)日期人均費(fèi)用攻略正文等保存下來,存儲到中。代表當(dāng)前的爬取速率。 showImg(https://segmentfault.com/img/remote/1460000015563534); 閱讀文本大概需要 13 分鐘。 通過之前的文章介紹,你現(xiàn)在應(yīng)該對 pyspider 有了一...
閱讀 3487·2023-04-25 22:04
閱讀 2243·2021-11-22 15:29
閱讀 2228·2021-10-11 10:57
閱讀 1480·2021-09-24 09:48
閱讀 3199·2021-09-09 09:34
閱讀 2624·2021-09-02 15:21
閱讀 2448·2019-08-30 15:53
閱讀 1189·2019-08-30 14:07