有什麼好的辦法解決爬蟲中很容易遇到的用 javascript 編寫的網頁的問題?

來源:互聯網
上載者:User
用的語言是python。目前想要爬的同花順股票行情(http://q.10jqka.com.cn/stock/fl/#refCountId=db_5093800d_645,db_509381c1_860 ),又一次被javascript卡住。因為一頁中只顯示52條資訊,想要看全部的股票資料必須點擊下面的頁碼,是用javascript寫的,無法直接用urllib2之類的庫處理。試過用webkit(ghost.py)來類比點擊,代碼如下:
page, resources = ghost.open('http://q.10jqka.com.cn/stock/fl/#refCountId=db_5093800d_645,db_509381c1_860 ')
page, resources = ghost.evaluate("document.getElementById('hd').nextSibling.getElementsByTagName('div')[13].getElementsByTagName('a')[7].click();", expect_loading = True)

提示Unable to load requested page, 或是返回的page是None。不知道無法解決。求教是代碼哪裡錯了,應該如何解決?(在百度和google找了很久解決方案,不過有關ghost.py的資料不是太多,沒能解決。)

以及,求問是否有更好的辦法解決爬動態網頁的問題?用webkit類比好像會減慢爬的速度,不是上策。

回複內容:

Headless Webkit,開源的有 PhantomJS 等。

能夠解析並運行頁面上的指令碼以索引動態內容是現代爬蟲的重要功能之一。

Google's Crawler Now Understands JavaScript: What Does This Mean For You?

你這個爬蟲跟JS關係不大,直接看Network,看發出的網路請求,分析每個URL,找出規律,然後用程式來類比這樣的請求,首先要善於用Chrome的Network功能,我們點幾頁,看Network如下:

第一頁資料URL:
http://q.10jqka.com.cn/interface/stock/fl/zdf/desc/1/hsa/quote
我手上正好有個比較好的例子。
需求:爬取愛漫畫上的漫畫。
問題:圖片的名字命名不規則,通過複雜的js代碼產生圖片的檔案名稱和url,動態載入圖片。js代碼的模式多樣,沒有統一的模式。
解決:Py8v庫。讀取下js代碼,加一個全域變數追蹤圖片的檔案名稱和url,然後Python和這個變數互動,取得某話圖片的檔案名稱和url。

全文在此
【原創】最近寫的一個比較hack的小爬蟲 能說 berserkJS 麼……
不過這種玩意可抗不了量啊
╭(╯ε╰)╮嫌麻煩的話直接上selenium吧,幾乎百分百地類比使用者在瀏覽器上的操作。也可以用來爬資料,不過速度較慢。開啟Chrome的開發人員控制台或者Firefox的FireBug,轉到Network那一欄,直接分析ajax訪問的url到底是哪些。

對於特定網站的爬蟲就不要想著類比javascript運行了,太費力而且效果還不好。把網站的url結構弄明白了直接構造表單就好。Selenium with Python 插一句題外話,同花順好像可以自訂函數,寫指令碼計算資料,還是挺方便的,一定要自己把資料全部爬下來嗎?phantomjs api比較吐血,建議基於之上封裝的casperjs吧,寫起來比較爽一個好的爬蟲需要解決兩個問題:
1、能夠解析動態網頁,比如瀑布式網站
2、能夠規避網站的封鎖
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.