摘要:進(jìn)入這篇圖集在中并沒(méi)有發(fā)現(xiàn)圖集有關(guān)的請(qǐng)求接口可能也是混排的我們可以查看頁(yè)面的源碼原來(lái)真的是混排的寫(xiě)法看了一下這里用到具體怎么實(shí)現(xiàn)的我們不去探討了我們只需要取出數(shù)據(jù)即可。嘿嘿看我的美圖去了。
作者信息:
Author : 黃志成(小黃)博客地址: 博客
吶,這是一篇福利教程.為什么這么說(shuō)呢.我們要爬取的內(nèi)容是美圖網(wǎng)站(嘿嘿,老司機(jī)都懂的)
廢話(huà)不多說(shuō).開(kāi)始今天的表演.
這個(gè)圖集網(wǎng)站不要問(wèn)我怎么來(lái)的.絕對(duì)不是我刻意找的.(其實(shí)是看了別的發(fā)的一篇文章,就想自己動(dòng)手實(shí)現(xiàn)一下)
我們今天的任務(wù)就是 將這些圖集保存下來(lái)。
首先我們需要獲取到所有的列表,我們往下拉動(dòng)滾動(dòng)條,拉到底,會(huì)繼續(xù)自動(dòng)加載內(nèi)容,我們通過(guò)瀏覽器的NetWork可以發(fā)現(xiàn)請(qǐng)求的數(shù)據(jù)包
我們來(lái)分析一下這個(gè)數(shù)據(jù)包
URL:https://www.toutiao.com/search_content/?offset=0&format=json&keyword=%E6%B8%85%E7%BA%AF%E7%BE%8E%E5%A5%B3&autoload=true&count=20&cur_tab=3&from=gallery
通過(guò)url我們可以知道幾個(gè)重要的參數(shù)
offset 偏移量 count 數(shù)量 cur_tab 當(dāng)前分類(lèi)
這里很多朋友可能對(duì)偏移量不太了解,這里我用sql語(yǔ)句表示一下,如果了解sql的朋友 肯定就知道了
mysql> SELECT * FROM art LIMIT offset , count mysql> SELECT * FROM table LIMIT 5,10; // 檢索記錄行 6-15 mysql> SELECT * FROM table LIMIT 95,1; // 檢索記錄行 96
這里我每次讀取一條,對(duì)一條進(jìn)行操作.
URL:https://www.toutiao.com/search_content/?offset=1&format=json&keyword=%E6%B8%85%E7%BA%AF%E7%BE%8E%E5%A5%B3&autoload=true&count=1&cur_tab=3&from=gallery
每次對(duì)offset 進(jìn)行自增即可了
我們點(diǎn)擊進(jìn)去 看看數(shù)據(jù)的結(jié)構(gòu).
我們需要獲取到該圖集的鏈接。
進(jìn)入這篇圖集,在NetWork中并沒(méi)有發(fā)現(xiàn)圖集有關(guān)的請(qǐng)求接口,可能也是混排的.
我們可以查看頁(yè)面的源碼
原來(lái)真的是混排的寫(xiě)法.看了一下這里用到vue.具體怎么實(shí)現(xiàn)的我們不去探討了,我們只需要取出數(shù)據(jù)即可。
那如何取出呢? 提供兩種方法,一種就是正則,一種就是自己寫(xiě)一個(gè)取文本的函數(shù).這里我用第二種作為演示,下面是取文本的函數(shù).
def txt_wrap_by(start_str, end, html): start = html.find(start_str) if start >= 0: start += len(start_str) end = html.find(end, start) if end >= 0: return html[start:end].strip()
我們?nèi)〕?JSON.parse("") 中的數(shù)據(jù)
觀(guān)察數(shù)據(jù),可以發(fā)現(xiàn) 我們?nèi)〕?url 就可以了,這里的數(shù)據(jù)是json但是被轉(zhuǎn)義了,我們就通過(guò)正則取出吧
正則的語(yǔ)法如圖上,最后我也會(huì)放出所有代碼滴,大家放心.
取到了uri 我們只要在前面拼上 http://p3.pstatp.com/ 即可.
然后保存為圖片即可~
上面說(shuō)的都是思路,最后放出代碼~
import requests,os,json,re,datetime # 主函數(shù) def main(): foreach_art_list() def foreach_art_list(): # 判斷目錄下是否存在jilv.txt文件 如果存在則讀取里面的數(shù)值 if os.path.exists("./jilv.txt"): f = open("./jilv.txt") n = f.read() n = int(n) f.close() else: n = 1 while True: url = "http://www.toutiao.com/search_content/?offset=" + str(n) + "&format=json&keyword=%E6%B8%85%E7%BA%AF%E7%BE%8E%E5%A5%B3&autoload=true&count=1&cur_tab=3&from=gallery" re = requests.get(url) data = re.json()["data"] if not data: break # 運(yùn)行圖片下載函數(shù) download_pic(data[0]["article_url"],n) n = n+1 # 將n寫(xiě)入文件 防止程序運(yùn)行出錯(cuò) 可以繼續(xù)運(yùn)行 with open("./jilv.txt", "w") as f: f.write(str(n)) def download_pic(url,n): download_pic_url = "http://p3.pstatp.com/" # 這里必須帶上協(xié)議頭,否則會(huì)請(qǐng)求失敗 header = { "user-agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36" } res = requests.get(url,headers = header) content = res.text img_list_json = txt_wrap_by("gallery: JSON.parse("",""),",content) # 正則獲取所有的uri img_list = re.findall(r"uri":"(.*?)"",img_list_json) #判斷是否有此目錄 if "img" not in os.listdir("."): os.mkdir("./img") if str(n) not in os.listdir("./img"): os.mkdir("./img/"+str(n)) for v in img_list: img_path = download_pic_url + v img_path = img_path.replace("", "") # 讀取圖片 atlas = requests.get(img_path).content # 保存圖片 with open( "./img/" + str(n) + "/" + str(datetime.datetime.now()) +".jpg", "wb") as f: # 把圖片寫(xiě)入文件內(nèi) f.write(atlas) # 取出兩個(gè)文本之間的內(nèi)容 def txt_wrap_by(start_str, end, html): start = html.find(start_str) if start >= 0: start += len(start_str) end = html.find(end, start) if end >= 0: return html[start:end].strip() # 運(yùn)行程序 main()
最后 展示一下 運(yùn)行結(jié)果:
這個(gè)程序還有許多不完善的地方,我會(huì)在之后教程加入 redis 和 多線(xiàn)程 的寫(xiě)法,讓他成為最快的爬蟲(chóng)~
敬請(qǐng)期待~ 今天就到這里了. 又是周末!祝大家周末愉快。嘿嘿~ 看我的美圖去了。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/44659.html
摘要:接上回第二部分,編寫(xiě)爬蟲(chóng)。進(jìn)入微信嵌套選擇圖片和上傳圖片接口,實(shí)現(xiàn)一鍵上傳圖片,遇到問(wèn)題看吧,我現(xiàn)在已經(jīng)可以通過(guò)爬蟲(chóng)獲取的提問(wèn)標(biāo)題了。微信故意省略想做小偷站的,看到這里基本上就能搞出來(lái)了。下一篇,采集入庫(kù) 上回,我裝了環(huán)境 也就是一對(duì)亂七八糟的東西 裝了pip,用pip裝了virtualenv,建立了一個(gè)virtualenv,在這個(gè)virtualenv里面,裝了Django,創(chuàng)建了一個(gè)...
摘要:爬蟲(chóng)也可以稱(chēng)為爬蟲(chóng)不知從何時(shí)起,這門(mén)語(yǔ)言和爬蟲(chóng)就像一對(duì)戀人,二者如膠似漆,形影不離,你中有我我中有你,一提起爬蟲(chóng),就會(huì)想到,一說(shuō)起,就會(huì)想到人工智能和爬蟲(chóng)所以,一般說(shuō)爬蟲(chóng)的時(shí)候,大部分程序員潛意識(shí)里都會(huì)聯(lián)想為爬蟲(chóng),為什么會(huì)這樣,我覺(jué)得有兩個(gè) 爬蟲(chóng)也可以稱(chēng)為Python爬蟲(chóng) 不知從何時(shí)起,Python這門(mén)語(yǔ)言和爬蟲(chóng)就像一對(duì)戀人,二者如膠似漆 ,形影不離,你中有我、我中有你,一提起爬蟲(chóng),就...
摘要:這篇文章的題目有點(diǎn)大,但這并不是說(shuō)我自覺(jué)對(duì)爬蟲(chóng)這塊有多大見(jiàn)解,我只不過(guò)是想將自己的一些經(jīng)驗(yàn)付諸于筆,對(duì)于如何寫(xiě)一個(gè)爬蟲(chóng)框架,我想一步一步地結(jié)合具體代碼來(lái)講述如何從零開(kāi)始編寫(xiě)一個(gè)自己的爬蟲(chóng)框架年到如今,我花精力比較多的一個(gè)開(kāi)源項(xiàng)目算是了,這是 showImg(https://segmentfault.com/img/remote/1460000018513379); 這篇文章的題目有點(diǎn)大...
摘要:在這之前,還是有必要對(duì)一些概念超輕量級(jí)反爬蟲(chóng)方案后端掘金前言爬蟲(chóng)和反爬蟲(chóng)日益成為每家公司的標(biāo)配系統(tǒng)。 爬蟲(chóng)修煉之道——從網(wǎng)頁(yè)中提取結(jié)構(gòu)化數(shù)據(jù)并保存(以爬取糗百文本板塊所有糗事為例) - 后端 - 掘金歡迎大家關(guān)注我的專(zhuān)題:爬蟲(chóng)修煉之道 上篇 爬蟲(chóng)修煉之道——編寫(xiě)一個(gè)爬取多頁(yè)面的網(wǎng)絡(luò)爬蟲(chóng)主要講解了如何使用python編寫(xiě)一個(gè)可以下載多頁(yè)面的爬蟲(chóng),如何將相對(duì)URL轉(zhuǎn)為絕對(duì)URL,如何限速,...
摘要:最近看前端都展開(kāi)了幾場(chǎng)而我大知乎最熱語(yǔ)言還沒(méi)有相關(guān)。有關(guān)書(shū)籍的介紹,大部分截取自是官方介紹。但從開(kāi)始,標(biāo)準(zhǔn)庫(kù)為我們提供了模塊,它提供了和兩個(gè)類(lèi),實(shí)現(xiàn)了對(duì)和的進(jìn)一步抽象,對(duì)編寫(xiě)線(xiàn)程池進(jìn)程池提供了直接的支持。 《流暢的python》閱讀筆記 《流暢的python》是一本適合python進(jìn)階的書(shū), 里面介紹的基本都是高級(jí)的python用法. 對(duì)于初學(xué)python的人來(lái)說(shuō), 基礎(chǔ)大概也就夠用了...
閱讀 2474·2021-11-23 09:51
閱讀 533·2019-08-30 13:59
閱讀 1836·2019-08-29 11:20
閱讀 2542·2019-08-26 13:41
閱讀 3250·2019-08-26 12:16
閱讀 741·2019-08-26 10:59
閱讀 3336·2019-08-26 10:14
閱讀 607·2019-08-23 17:21