對於某些靜態網站,只要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
)