Scrapy實戰之抓取ajax網站

來源:互聯網
上載者:User

目標網站為http://www.ccgp-hubei.gov.cn,經檢查HTML代碼發現這個網頁有一個iframe,iframe裡面的內容才是網站的真正有用的內容,所以第一步是要先找到真正的URL。

以http://www.ccgp-hubei.gov.cn/fnoticeAction!listFNotice.action為例,這個網址的主要結構是一個分頁的列表,有上頁、下頁等等。查看這兩個按鈕的HTML Element可以看到這是一個js的函數:

一開始的時候我一直在想,既然這是js函數,那我就用ScrapyJS + Splash的組合來解決,但是經過實驗發現出現了一個問題。就是在Splash指令碼中,可以修改document.title = "hello"之類的東西,但是調用了js函數轉到另一個連結之後,返回的仍然是最開始時候的HTML代碼,無論是用splash:html()還是document.body.innetHTML都不行。不知道到底是沒有運行js函數成功,還是Splash本身的問題,在網上尋找了一下,發現遇到這種問題的人很多,但是沒有一個可行的方案,最後GitHub上某大神告訴我Splash在開發splash:mouse_click()函數,讓我靜靜等待。

無奈之下,我換了種思路,開啟F12,點擊“下頁”按鈕,看看瀏覽器倒底做了什麼,如圖所示:

這就量瀏覽器POST的資料,這下嘗試一下直接向伺服器發送這些資料:

# -*- coding: utf-8 -*-from scrapy.spiders import Spiderfrom scrapy.http import FormRequestfrom scrapy.shell import inspect_responseclass ThirdSpider(Spider):    name = 'ThirdSpider'    download_delay = 0    start_urls = [        'http://www.ccgp-hubei.gov.cn/fnoticeAction!listFNotice.action'    ]    def parse(self, response):        formdata = {"queryInfo.BEGINTIME1": "", "queryInfo.BEGINTIME2": "",                    "queryInfo.CGFS": "", "queryInfo.CGLX": "", "queryInfo.ENDTIME1": "",                    "queryInfo.ENDTIME2": "", "queryInfo.FBRMC": "", "queryInfo.GGLX": "",                    "queryInfo.QYBM": "", "queryInfo.TITLE": "", "queryInfo.curPage": "2",                    "queryInfo.pageSize": "15", "rank": ""}        yield FormRequest.from_response(response, formdata=formdata, callback=self.parse_item)    def parse_item(self, response):        inspect_response(response, self)

結果如下所示,可以看到頁碼果然已經轉到了第二頁,至此問題結束。

相關文章

聯繫我們

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