文章詳情頁
爬取今日頭條Ajax請求
瀏覽:291日期:2022-06-11 11:18:07
網(wǎng)址:https://www.toutiao.com/
搜索頭條
可以得到這個網(wǎng)址:
開發(fā)者工具查看:
我們在搜索中并沒有發(fā)現(xiàn)上面的文字,那么我們可以初步判定,這個由Ajax加載,然后渲染出來的。此時切換到xhr過濾,可以看到確實是ajax請求。
觀察請求的特點,發(fā)現(xiàn)只有offset是改變的,而且一次加20,。
我們可以用它來控制數(shù)據(jù)分頁,然后把圖片下載下來。代碼如下:
import requestsimport osfrom urllib.parse import urlencodefrom hashlib import md5from multiprocessing.pool import Poolfrom requests import codesdef get_page(offset): params = { "offset":offset, "format":"json", "keyword":"街拍", "autoload":"true", "count":"20", "cur_tab":"1", "from":"search_tab" } url = "https://www.toutiao.com/search_content/?"+urlencode(params) try: response = requests.get(url) if response.status_code == 200: # print(url) return response.json() except requests.ConnectionError: return None# get_page(0)def get_images(json): if json.get("data"): for item in json.get("data"): if item.get("cell_type") is not None:continue title = item.get("title") images = item.get("image_list") for image in images:yield { "title":title, "image":"https:" + image.get("url"),}def save_image(item): #os.path.sep 路徑分隔符‘//" img_path = "img" + os.path.sep + item.get("title") if not os.path.exists(img_path): os.makedirs(img_path) try: resp = requests.get(item.get("image")) # print(type(resp)) if codes.ok == resp.status_code: file_path = img_path + os.path.sep + "{file_name}.{file_suffix}".format(file_name=md5(resp.content).hexdigest(),#md5是一種加密算法獲取圖片的二進(jìn)制數(shù)據(jù),以二進(jìn)制形式寫入文件file_suffix="jpg") if not os.path.exists(file_path):with open(file_path,"wb")as f: f.write(resp.content) print("Downladed image path is %s" % file_path) else:print("Already Downloaded",file_path) except requests.ConnectionError: print("Failed to Save Image,item %s" % item)def main(offset): json = get_page(offset) for item in get_images(json): print(item) save_image(item)GROUP = 0GROUP_END = 2if __name__ == "__main__": pool = Pool() groups = ([x*20 for x in range(GROUP,GROUP_END)]) pool.map(main,groups) #將groups一個個調(diào)出來傳給main函數(shù) pool.close() pool.join() #保證子進(jìn)程結(jié)束后再向下執(zhí)行 pool.join(1) 等待一秒
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
標(biāo)簽:
Ajax
相關(guān)文章:
1. HTTP協(xié)議常用的請求頭和響應(yīng)頭響應(yīng)詳解說明(學(xué)習(xí))2. 詳談ajax返回數(shù)據(jù)成功 卻進(jìn)入error的方法3. ThinkPHP5 通過ajax插入圖片并實時顯示(完整代碼)4. Ajax實現(xiàn)搜索功能的分頁5. Spring Boot設(shè)置支持跨域請求過程詳解6. Ajax引擎 ajax請求步驟詳細(xì)代碼7. ASP.NET MVC限制同一個IP地址單位時間間隔內(nèi)的請求次數(shù)8. 利用ajax+php實現(xiàn)商品價格計算9. Ajax實現(xiàn)表格中信息不刷新頁面進(jìn)行更新數(shù)據(jù)10. 通過Ajax方式綁定select選項數(shù)據(jù)的實例
排行榜
