日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

分析ajax爬取果壳网

發布時間:2024/3/12 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分析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爬取果壳网的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。