python爬蟲-動態網站爬取

對於某些靜態網站,只要requests.get(‘url')即可獲得頁面全部內容,如鏈家使用pg代表頁面、rs代表關鍵字,https://sh.lianjia.com/ershoufang/pg2rs%E8%99%B9%E5%8F%A3/

但對於一些動態加載的網頁,則不可以直接通過get url的方式獲取到網頁內容

一、Ajax

Ajax 即“Asynchronous Javascript And XML”(異步 JavaScript 和 XML),是指一種創建交互式、快速動態網頁應用的網頁開發技術,無需重新加載整個網頁的情況下,能夠更新部分網頁的技術。

jax技術的核心是XMLHttpRequest對象(簡稱XHR),這是由微軟首先引入的一個特性,其他瀏覽器提供商後來都提供了相同的實現。XHR爲向服務器發送請求和解析服務器響應提供了流暢的接口,能夠以異步方式從服務器取得更多信息,意味着用戶單擊後,可以不必刷新頁面也能取得新數據

二、查看網頁實際信息

點擊 元素檢查-network-XRH(火狐有時候會在JS裏)

如,QQ音樂中查看歌名列表,

三、使用爬蟲爬取信息

找到的真正的請求信息(請求網址、提交的表單)後,在scrapy中只要如下代碼便可實現爬取,請求方式post或者get視網站情況而定

def start_requests(self):
        try:
            ses = requests.session()  # 獲取session
            ses.get(url=self.url, headers=self.headers)
            cookie_start = ses.cookies  # 爲此次獲取的cookies
            cookie_start=requests.utils.dict_from_cookiejar(cookie_start)
            # print("page:{}    首頁cookie獲取suc...".format(self.pn))
        except:
            print("page:{}    首頁cookie獲取異常...".format(self.pn ))
        yield scrapy.FormRequest(url=self.url_start
                                 , formdata={'first': 'True', 'pn': str(self.pn), 'kd':self.kd}
                                 , method='Post'
                                 , headers=self.headers
                                 , cookies=cookie_start
                                 , encoding='utf-8'
                                 , dont_filter=True
                                 , meta={'pn': str(self.pn),'kd': self.kd}
                                 , callback=self.parse
                                 )

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章