AJAX 是一種用於創建快速動態網頁的技術。 通過在后台與服務器進行少量數據交換,AJAX 可以使網頁實現異步更新。這意味着可以在不重新加載整個網頁的情況下,對網頁的某部分進行更新。
近期在學習獲取js動態加載網頁的爬蟲,決定通過實例加深理解。
1、首先是url的研究(谷歌瀏覽器的審查功能)
http://www.toutiao.com/search_content/?offset=0&format=json&keyword=%E8%A1%97%E6%8B%8D&autoload=true&count=20&cur_tab=1
對應用get方法到url上獲取信息。網頁對應offset=0 、keyword=%E8%A1%97%E6%8B%8D 是會變的。如果要批量爬取,就得設置循環。
當網頁下拉,offset會20、40、60的變化,其實就是每次加載20個內容。
2、
通過requests獲得response,進行json解析。
還是一樣的網頁,切換到Preview,可以看到json的數據內容。title在['date'][0]['title']下,其他類似。
import json import requests,os def download_pic(file,name,html): r = requests.get(html) filename=os.path.join(file,name+'.jpg') with open(filename,'wb') as f: f.write(r.content) url = 'http://www.toutiao.com/search_content/?offset=0&format=json&keyword=%E8%A1%97%E6%8B%8D&autoload=true&count=20&cur_tab=1' res = requests.get(url) json_data = json.loads(res.text) data = json_data['data'] for i in data: print i['title'] file_path = os.getcwd()+'\image' print file_path for p in i['image_detail']: print p['url'] name = p['url'].split('/')[-1] download_pic(file_path,name,p['url'])
在當前目錄新建image文件夾,然后爬蟲下載圖片。
圖片名截取url鏈接的后面部分31e30003d4be75c719ae.jpg
例如http://p3.pstatp.com/large/31e30003d4be75c719ae
結果如下:(僅供學習交流)
循環什么的沒寫只爬取前20個鏈接的圖片。
--------------------------------------------------------------------------------------------------------------
http://jandan.net/ooxx——煎蛋網
同樣是妹子圖,有些網頁不涉及json動態加載的就比較簡單了,用beautifulsoup即可
貼上代碼匿了
import requests,os,time from bs4 import BeautifulSoup def download_pic(file,name,html): r = requests.get(html) filename=os.path.join(file,name+'.jpg') with open(filename,'wb') as f: f.write(r.content) def get_url(url): res = requests.get(url) soup = BeautifulSoup(res.text,'lxml') data = soup.select(' div.text > p > img') print data for i in data: s = i.attrs['src'][2:] print s file_path = os.getcwd()+'\imgage1' print file_path name = i.attrs['src'].split('/')[-1] download_pic(file_path,name,'http://'+s) for i in reversed(range(236)): url = 'http://jandan.net/ooxx/page-'+str(i)+'#comments' if requests.get(url).status_code == 200: get_url(url) time.sleep(5)