分析ajax爬取果壳网
一、確定要爬取的網頁
? ? ? ? 首先選擇要爬取的網頁,我要爬取的是果殼網,url為:https://www.guokr.com/scientific/
爬取每篇文章的標題、名字、作者、發布時間等信息
??
二、分析網頁
? ? ? 我們每次往下拉的時候都會有源源不斷的文章出來,而我們在分析該網頁的時候新文章的HTML也是我們往下拉的時候出現的,那么恭喜你了,這個網站的數據放在ajax中了,聽到這里就有人覺得麻煩了,以前爬取的數據都是固定的,requests請求后就可以直接分析了,其實ajax并不難,我們只要找到ajax的地址和其中的參數即可,為什么這么說呢?因為每次往下拉的時候,ajax每次會都有固定文章出現,這其中肯定有相對應的參數來控制的,我們只要分析這個ajax的url就好了,把其固定不變的截取下來,而改變的參數則我們來傳參
? ? ? ?下面這個文件就是我們要找的ajax地址了,點擊進去看下
? ? ? ?看下我們的headers,分析我們請求的url,然后得出結論
固定的是 ? ?https://www.guokr.com/apis/minisite/article.json??
有三個參數,分別是retrieve_type、limit、offset,經過多次對比,發現就是offset一直再改變,所以前面兩個參數寫死,后面的根據參數來改變,開始的時候有18篇文章,而每次ajax會加載出20篇,所以就可以得到offset的值了
三、 分析出每篇文章的url
我們看到每個ajax中都放了20條數據,數據都在result的東西里面
點開這個result,在最下面找到了我們要的url,這里需要記住最重要的一點,得到的ajax的格式都是json格式的
四、分析每篇文件的url,找到需要的數據的位置
隨便點開一篇文章,根據分析,發現所有的數據都放在這個div中,只需得到這個div,然后進一步分析得到里面的數據
五、代碼
import requests from bs4 import BeautifulSoup# 得到每個offset值 def off_set():offset = 18# 先取99個ajax,for i in range(1,100):if i == 1:parse_url(offset)else:offset = limit + offsetparse_url(offset)# 將得到的offset傳入 def parse_url(offset):# 帶參傳遞data = {'retrieve_type':'by_subject','limit':'20','offset':offset}# 請求這個ajax地址response = requests.get(start_ajax,params=data,headers=headers)# 得到的數據是個json格式,所以用requests自帶的json函數來解析它ajax_data=response.json()# 解析得到每篇文章的url,因為ajax是個字典格式,而其中result的值卻是個列表,所以要用[0]取出lst=ajax_data['result']for i in lst:url = i['url']print(url)parse(url)def parse(url):html = requests.get(url,headers=headers)html = html.textsoup = BeautifulSoup(html,'lxml')data = soup.find_all('div',class_='content-th')for i in data:title = i.find_all('a')[0].textname = i.find_all('h1')[0].text.split()[0]zuoze = i.find_all('div','content-th-info')[0].find_all('a')[0].texttime = i.find_all('div','content-th-info')[0].find_all('meta')[0]['content']print('{}\t\t{}\t\t{}\t\t{}'.format(title,name,zuoze,time))if __name__ == '__main__':start_ajax = 'https://www.guokr.com/apis/minisite/article.json?'headers = {'User-Agent': 'Mozilla/4.0(compatible;MSIE 5.5;Windows NT)', }# 每個offset都是以18為基數,每次疊加20limit = 20off_set()運行結果:
就這樣得到了我們要的結果,當然你要其它數據可以自己寫,我只想告訴你們如何去解析ajax文件
總結
以上是生活随笔為你收集整理的分析ajax爬取果壳网的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: FATAL ERROR: MarkCom
- 下一篇: 支付宝RSA2公钥证书生成办法