scrapy抓取ajax請求的網頁
在上一篇部落格
http://zhouxi2010.iteye.com/blog/1450177
中介紹了用scrapy抓取網頁,但是隻能抓取普通html中的連結,對於ajax請求的網頁卻抓不到,但是實際應用中ajax請求又是十分普遍的,所以這裡在記錄下抓取ajax頁面的方法.
仍然是spiders/book.py:
- class BookSpider(CrawlSpider):
- ................
- ................
- ................
- def parse_item(self, response):
- hxs = HtmlXPathSelector(response)
- item = BookItem()
- ........
- ..........
- #這裡url是虛構的,使用時需要修改
- url = "http://test_url/callback.php?ajax=true"
- request = Request(url, callback=self.parse_ajax)
- request.meta['item'] = item
- #這裡將ajax的url找出來,然後夠找請求,框架執行請求收到返回後再回撥
- yield request
- def parse_ajax(self, response):
- data = response.body
- #這裡寫正則匹配或者選擇XPathSelector獲取需要捕獲的資料,略
- ajaxdata = get_data(data)
- #由於返回可能是js,可以採用python來模擬js直譯器,不過這裡偷懶就用json來進行轉換
- if ajaxdata:
- x = '{"data": "' + ajaxdata.replace('\n', '') + '"}'
- ajaxdata = simplejson.loads(x)['data']
- else:
- ajaxdata = ''
- item = response.meta['item']
- item['ajaxdata'] = ajaxdata
- for key in item:
- if isinstance(item[key], unicode):
- item[key] = item[key].encode('utf8')
- #到這裡一個Item的全部元素都抓齊了,所以返回item以供儲存
- return item
相關文章
- 網頁請求(Ajax)網頁
- 用scrapy進行網頁抓取網頁
- WebForm 頁面ajax 請求後臺頁面 方法WebORM
- ajax請求
- 首頁 使用axios 傳送ajax請求iOS
- html頁面中如何傳送ajax請求HTML
- ajax請求 juery
- 使用history儲存列表頁ajax請求的狀態
- JS 中的網路請求 AJAX, Fetch, WebSocketJSWeb
- 首頁父子組元件 ajax陣列請求各個頁面元件陣列
- AJAX 非同步請求非同步
- python專案例項:抓取網頁時間段內的請求次數、頻寬Python網頁
- POST請求登入網頁網頁
- 原聲ajax與jquery ajax請求的區別jQuery
- 原生ajax請求&JSONPJSON
- wordpress 處理 ajax 請求
- AJAX 跨源 HTTP 請求HTTP
- jquery ajax 跨域請求jQuery跨域
- 防止ajax請求重發
- ajax可以正常請求資料,,web端頁面報錯Web
- ajax上傳檔案的請求
- 封裝ajax、axios請求封裝iOS
- ajax請求servlet返回資料Servlet
- KKB : Jquery實現Ajax請求jQuery
- Ajax請求後臺資料
- 如何傳送請求以及AJAX
- ajax請求如何防止快取快取
- 原生JS封裝AJAX請求JS封裝
- ajax 請求某個檔案
- springmvc處理ajax請求SpringMVC
- ajax中POST請求與引數(請求體)設定
- ajax中設定請求頭和自定義請求頭
- 跨域ajax請求,伺服器會收到請求嗎?跨域伺服器
- ajax跨域請求之CORS的使用跨域CORS
- 基於jQuery的三種AJAX請求jQuery
- jquery的ajax請求servlet與響應jQueryServlet
- 一個簡單的Ajax請求例子
- 判斷請求是否為Ajax請求的小妙招