過往期的文章,我們可以爬取網頁上面的文字信息,本期介紹一下如何爬取圖片信息,以及保存圖片到本地。
我們以?;ňW為爬取對象,爬取圖片信息:http://www.xiaohuar.com
class PowersSpider(scrapy.Spider): name = "xiaohua" # 爬蟲的名字 allowed_domains = ["xiaohuar.com"] # 定義第一個URL first_url = 'http://www.xiaohuar.com/list-1-1.html' def start_requests(self): # 返回調度器處理好的request yield Request(self.first_url, self.parse)
定義好爬蟲的基本信息后,定義prase函數來處理爬蟲信息
def parse(self, response): tds = BeautifulSoup(response.text, 'lxml').find_all(class_='img') item = PowersItem_xiaohua() # item初始化 # print(tds) for td in tds: name = td.find_all('a')[0].find('img')['alt'] address = td.find_all('a')[0].find('img')['src'] address = 'http://www.xiaohuar.com' + address item['name'] = name item['address'] = address yield item
通過查看網頁信息,可以很清楚的知道我們爬取照片的信息,在照片信息里面有一個圖片地址,但是這并不是圖片的真正地址,圖片的真正地址需要加上?;ňW的主頁地址,當你把這個真正的圖片地址輸入瀏覽器時,就可以很清楚的看到圖片的原圖了,右擊可以另存為,但是我們不會一個一個照片的保存
scrapy自帶圖片保存的中間組件,但是使用起來,比較麻煩,我們自己寫pipeline來保存照片
class Powerspipeline_xiaohua(object): def process_item(self, item, spider): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36'} if isinstance(item, PowersItem_xiaohua): #請求網頁 req = urllib.request.Request(url=item['address'], headers=headers) #打開網頁 res = urllib.request.urlopen(req) #保存圖片,并修改圖片的名字 file_name = os.path.join(r'D:\foxtable\picture', item['name'] + '.jpg') with open(file_name, 'wb') as fp: fp.write(res.read())#保存圖片 else: print('no find items') return item
python自帶urllib,也可以使用urllib來做爬蟲,在此我們定義 了一個headers
headers:
在使用python爬蟲爬取數據的時候,經常會遇到一些網站的反爬蟲措施,一般就是針對于headers中的User-Agent,如果沒有對headers進行設置,User-Agent會聲明自己是python腳本,而如果網站有反爬蟲的想法的話,必然會拒絕這樣的連接。而修改headers可以將自己的爬蟲腳本偽裝成瀏覽器的正常訪問,來避免這一問題。
美女照片
運行以上代碼,就可以把美女照片全部保存到本地了
本期只是爬取了一個界面,網友們可以參考往期的文章,爬取更多的界面,以便保存更多的美女照片。
下期我們分享一下如何爬取音樂文件
謝謝大家的點贊與轉發,關于分享的文章,大家有任何問題,可以在評論區一起探討學習?。。?/strong>
什么學習HTML?
理解HTML代碼是制作網頁的基本技能。在互聯網高度發達的今天,網頁制作技術開始變的和修圖、處理視頻一樣重要。
第一,學會制作網頁就可以把自己想要展示的信息讓其他人使用瀏覽器觀看,無論是文字、照片還是視頻都可以通過瀏覽器觀看,甚至是分享自己制作的小游戲。
第二,理解網頁運行的基本原理后可以更好的瀏覽他人的網頁,尋找有用信息,更合理的使用第三方工具,簡單高效的制作自己的網頁。
HTML學習難度與重要性
HTML代碼本身非常容易理解,使用也非常簡單,但是單純使用HTML代碼寫出的網頁效果和我們平時看到的網頁相差甚遠。要想做出一個漂亮的頁面,我們還需要CSS和JavaScript的幫助。
HTML、CSS、JavaScript這些不同的代碼都有什么作用呢?簡單來說,HTML代碼可以為網頁提供基本內容,比如文字、圖片、音樂、視頻等。CSS代碼可以為頁面安排布局,比如標題的位置、字體、顏色、大小等,籠統的說就是為HTML代碼添加的內容增加樣式信息,例如修改位置、尺寸、顏色等屬性。JavaScript代碼可以為頁面提供交互(互動)功能,例如通過按鈕控制頁面內容的隱藏、出現,或者為多張圖片添加輪播功能等。
對比起來,HTML的學習難度最低,但作用是最重要的,因為一切頁面的基礎是內容,沒有內容,樣式與交互都不存在。
認識HTML基本結構
第一行 <!DOCTYPE HTML>
第二行 <html>
第三行 <head>
第四行 </head>
第五行 <body>
第六行 </body>
第七行 </html>
以上七行代碼是一個網頁文件的HTML代碼的基本結構。
大家觀察一下可以發現一個規律,每一行的內容都是寫在“<>”里面的。原因說來話長,先記住就行。每個寫在“<>”里面的內容叫做“標簽”。以后“標簽”這個詞會經常出現。
第一行<!DOCTYPE HTML>標簽指示 web 瀏覽器關于頁面使用哪個 HTML 版本進行編寫的指令(這句話可以暫時不必理解)。重要的是這句傲嬌的代碼只能存在在HTML代碼的第一行!
第二行<html>標簽與第七行的</html>標簽是一對,“<html>”叫做開始標簽,“</html>”叫做結束標簽。他們之間的區別在于結束標簽比開始標簽多一個“/”。這是HTML代碼的一個重要規律,以后我將要學到的大部分標簽都是這樣的,可能瀏覽器有些強迫癥吧,如果沒有結束標簽它會很不舒服,有可能會消極怠工而產生麻煩(不能正常顯示)。不過遺憾的是<!DOCTYPE HTML>太傲嬌,至今沒有另一半。<html> 與 </html> 標簽限定了文檔的開始點和結束點。
第三行與第四行組成一對,叫做“head”標簽。顧名思義,這個“頭”標簽里的內容統領全局,比如控制布局與樣式的CSS代碼文件和添加互動功能的JavaScript代碼文件在這里添加或導入;搜索頁面用的關鍵詞信息在這里添加;頁面信息的編碼方式也是由此指定;瀏覽器窗口的標題也在這里顯示。
第五行與第六行組成一對,叫做“body”標簽。用來顯示所有的頁面內容信息。
畫個圖來表示一下這四個標簽的層級關系(就是誰包含誰的意思,或者誰在誰的勢力范圍內出現):
邊學邊練------寫一個最簡單的頁面
正所謂萬丈高樓平地起,下面我們就動手做我們的第一個網頁文件。
工具:電腦,安裝一個瀏覽器(IE 火狐 谷歌瀏覽器都可以),確定“記事本”工具可用。
有了以上工具我們就可以寫了。
Step1 新建一個.txt文件。
操作如下:
(1)選擇合適的磁盤,比如D盤或F盤新建一個文件夾,命名為“網頁”。點擊進入。
(2)在空白處點擊鼠標右鍵新建一個文本文件,命名為“第一個頁面”。這時我們就有了一個“第一個頁面.txt”文件了。
如果你的電腦不顯示“.txt”這樣的文件后綴,可以在屏幕左上方尋找“查看”菜單,如圖2
圖 2
點擊后,出現如下菜單如圖3,點擊“選項”。
圖 3
點擊“查看”,去掉“隱藏已知文件類型的擴展名”選項前的“對號”,如圖4所示。這時就能顯示或修改文件后綴了。
圖 4
Step2 添加內容
(1)雙擊打開“第一個頁面.txt”文件,把HTML基本結構共七行代碼輸入進去。
(2)保存,關閉文件,在“第一個頁面.txt”文件上點擊鼠標右鍵,選擇“重命名”,將“.txt”修改為“.html”。這時,系統會提示,如圖1,大膽點“是”。
圖 1
這時我們的文件就變成了html網頁文件了。
我們雙擊這個文件發現瀏覽器內一片空白,這就好比我們在桌子上擺了個碟子,里面并沒有放美食。瀏覽器中的一片白就是空碟子的顏色,而HTML基本結構就是這個碟子。
下面我們往碟子里加點東西。
Step3 添加內容
(1)在“第一個頁面.html”文件上點擊鼠標右鍵,選擇“打開方式”,選擇“記事本”,如果沒有“記事本”選項,請點擊“選擇其他應用”,點擊選擇最下面的“更多應用”,選擇“記事本”。下一次選擇“打開方式”時,“記事本”就會出現了。
(2)在<head></head>標簽之間添加“<title>學習寫第一個網頁</title>”。在<body></body>之間添加“<h1>第一個網頁</h1>”;“<p>隨著學的內容越來越多,網頁就會越來越漂亮了!</p>”完成如圖5
圖 5
(3)保存,關閉,雙擊打開!效果如圖6
圖6
今天的邊學邊做就到這里,下一次會詳細解釋<head>標簽、<body>標簽中常出現的子標簽以及它們各自的作用。
第二篇《邊學邊做網頁篇——<head>標簽里裝點啥?》http://mp.toutiao.com/preview_article/?pgc_id=6738988870622249479
網頁下載下來使用,在日常工作中使用頻率還是很高的,有時候確實能解一時之急,我自己就有很窘迫的經歷。
我開會的時候,都會把準備好的文檔存在局域網,到會議室直接打開就能直接用了。有一次到分公司,由于分公司剛剛成立,內網還沒有和母公司連通。結果這下子懵逼了,上不去內網,看不到文檔。又是叫同事發過來,又是提發送文件的安全申請,讓人著急。
如果把網站保存下來,放在自己的電腦中,既不用擔心信息泄露問題,又不用為了看不了文檔而著急。
遇到問題,記錄下來,然后解決問題,程序員的解決思路永遠是自己創造輪子的,接下來就是不斷的探索解決方案。
其實下載網頁的方式有很多種,其中有幾種辦法使用的比較多,例如:如果你用Chrome,直接按 Ctrl+s 就可實現。使用這種方法,Chrome會把整個網站,按照編譯完成的源碼目錄結構保存下來。像下面這樣:
下載完成的文件直接點擊 xxx.html 可以直接離線訪問,但是這種方式對目錄的依賴結構比較高,怎么理解呢?就是 html 文件和對應文件名的文件夾必須在同一個目錄中,才能正常使用。拷貝到其他機器的時候必須要兩個同時拷貝才可以,否則就會排版錯亂。
如果有十個或者更多的網頁需要拷貝或者刪除,就會很麻煩,例如我想在其中找到其中幾個,復制到其他地方,很容易弄錯順序。
HTML 是一種純文本格式,它用于排版文字。純文本文檔的意思就是,文檔中只包含文字內容,不包含二進制內容,舉個例子:打印出的A4紙,只有文字沒有圖片。而 HTML 想要顯示照片等二進制信息,通常都會鏈接到其他文件,也就是上面文件夾里面的內容。
不過 Chrome 下載文件這種方式也有優點,下載下來的文件可以保持獨立性,比如說,我需要這個網頁中的一張圖片,那么就可以直接到文件夾里面尋找了。
另外還有一種辦法,也有很多人再使用。Chrome 在打印網頁的時候,會把網頁轉成 PDF ,然后在進行打印。那么就給我們提供了很明確的思路,把網頁直接保存為 PDF ,這樣保存下來的網頁就只有一個文件。
使用Chrome,直接按下Ctrl+p就可以。然后目標打印機選擇 另存為 PDF 。
這個功能很多瀏覽器都支持
但是這種辦法也有很明顯的缺點,由于 PDF 是靜態文檔,網頁上的一些動畫可能不會正常顯示,而且排版也有可能會錯亂,這完全靠運氣。個人覺得這不是一種很靠譜的方法。
這時候主角來了!有一個工具既可以把網頁保存為 html 又可以保持是單文件。他就是 monolith ,你可以在 github 上面找到它,但是源碼并沒有編譯為可執行文件,我把它編譯了一下,下面會放上來鏈接,https://github.com/leconio/Repos/raw/master/monolith.7z。
那么下面就簡單說說使用方法:如果你下載我的鏈接,那么里面有三個文件:
第一個是Mac平臺編譯出來的,使用方式為:
./monolith 網站地址 > xxx.html
默認情況下 monolith 會把生成的 html 輸出到標準輸出流,也就是當前終端。使用 > 我們把輸出的內容重定向并覆蓋到文件。
執行完成之后,在這個目錄下面就會有一個對應的文件:xxx.html 。
另外兩個是 Windows 平臺使用的。為了簡化使用,我寫了一個 CMD 腳本。直接點擊 monolith.cmd ,然后粘貼地址就可以完成下載。
下載完成之后,在本地你會發現只有一個 html 文件。我們打開之后,發現圖片和JS等信息都在,而且排版正常。那么就要思考了,我們之前說過,HTML 是放置純文本信息的,那么圖片在哪里呢?
答案顯而易見,就在 HTML 文件里面。為了方便小圖片傳輸,有一種叫 Base64 的東西,它可以把二進制信息變成成純文本。這在使用 Json 傳遞數據的今天十分常見,它可以減少一次請求(題外話),這里就是用的這個原理。monolith 把圖片等二進制內容轉為了純文本,保存在 HTML 文件中。我們在下載的文件源碼可以看到:
對比源代碼,src 信息已經變成了 base64 格式的圖片,就是那串亂碼。復制那串亂碼,從網上搜一個 base64 轉圖片工具,粘貼進去,這時會發現就是我們看到的那張圖片。這樣一來,無論這個網站上有多少個文件,都會保存到一個 HTML 文件里面,而且還能離線使用。
當然,base64 編碼的圖片比原生圖片略大,這可能也是你現在在擔心的問題。不過 monolith 會特殊處理文件體積。我們可以看看 Chrome 直接下載和使用 monolith 下載體積相差多少。我們把兩種方式下載的網頁都進行了 7-Zip 壓縮。
我們可以看到,使用 monolith 下載會比 Chrome 直接下載小一倍還多!
最后要說的是局限性,無論那種方法,都幾乎不能把視頻網站中的視頻下載下來。因為現在的視頻地址都是 Token 加密的,同理,使用 Token 加密的其他請求信息也無法下載。
比如你可以試試下載其他網站的首頁,Logo 和視頻都是下載不了的。但是也有解決辦法,那就是另外一個領域的事情了,以后有機會說給大家聽。
如果這篇文章對您或者您的朋友有幫助,感謝您關注,轉發。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。