Python爬蟲-帶你爬取高清美女圖片
本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯絡我們以作處理
以下文章來源於騰訊雲 作者:明天依舊可好
( 想要學習Python?Python學習交流群:1039649593,滿足你的需求,資料都已經上傳群檔案流,可以自行下載!還有海量最新2020python學習資料。 )
爬蟲的爬取步驟:
- 準備好我們所需要的代理IP(代理IP的獲取方法見:https://blog.csdn.net/qq_38251616/article/details/79544753)
- 首先url是必要的
- 利用url進行爬取
- 將爬取爬取到的資訊進行整合
- 儲存到本地
具體的步驟:
- 利用代理IP和requests.get()語句獲取網頁
- BeautifulSoup()解析網頁(BeautilfulSoup的功能可以參照這個https://www.jianshu.com/p/41d06a4ed896)
- find_all()找到相應的標籤
- 用.get_text()獲取標籤中的內容
- urlretrieve()將圖片下載到本地(如果是文字直接儲存到本地檔案中即可)
程式碼示例:
headers = { "User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36" } #獲取隨機ip proxies = get_random_ip(ip_list) req = requests.get(url=url,headers=headers,proxies=proxies) soup = BeautifulSoup(req.text,'lxml') targets_url_1 = soup.find('figure') targets_url = soup.find_all('noscript')
完整程式碼:
這是一份爬取知乎圖片的教程程式碼,其中涉及的代理ip檔案(IP.txt)
import requests,random,os,time from bs4 import BeautifulSoup from urllib.request import urlretrieve #獲取IP列表並檢驗IP的有效性 def get_ip_list(): f=open('IP.txt','r') ip_list=f.readlines() f.close() return ip_list #從IP列表中獲取隨機IP def get_random_ip(ip_list): proxy_ip = random.choice(ip_list) proxy_ip=proxy_ip.strip('\n') proxies = {'https': proxy_ip} return proxies def get_picture(url,ip_list): headers = { "User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36" } #獲取隨機ip proxies = get_random_ip(ip_list) req = requests.get(url=url,headers=headers,proxies=proxies) soup = BeautifulSoup(req.text,'lxml') targets_url_1 = soup.find('figure') targets_url = soup.find_all('noscript') #儲存圖片連結 list_url = [] for each in targets_url: list_url.append(each.img.get('src')) for each_img in list_url: #判斷資料夾(相簿)是否存在,若不存在則建立資料夾 if '相簿' not in os.listdir(): os.makedirs('相簿') #下載圖片 proxies = get_random_ip(ip_list) picture = '%s.jpg' % time.time() req = requests.get(url=each_img,headers=headers,proxies=proxies) with open('相簿/{}.jpg'.format(picture),'wb') as f: f.write(req.content) #每爬取一張圖片暫停一秒防止ip被封 time.sleep(1) print('{}下載完成!'.format(picture)) def main(): ip_list = get_ip_list() url = 'https://www.zhihu.com/question/22918070' get_picture(url,ip_list) if __name__ == '__main__': main()
爬蟲簡介:
爬蟲簡介:(英語:web crawler),也叫網路蜘蛛(spider),是一種用來自動瀏覽全球資訊網的網路機器人。網路爬蟲始於一張被稱作種子的統一資源地址(URL)列表。當網路爬蟲訪問這些統一資源定位器時,它們會甄別出頁面上所有的超連結,並將它們寫入一張“待訪列表”,即所謂爬行疆域。此疆域上的URL將會被按照一套策略迴圈來訪問。如果爬蟲在執行的過程中複製歸檔和儲存網站上的資訊,這些檔案通常儲存,使他們可以較容易的被檢視。閱讀和瀏覽他們儲存的網站上並即時更新的資訊,這些被儲存的網頁又被稱為“快照”。越大容量的網頁意味著網路爬蟲只能在給予的時間內下載越少部分的網頁,所以要優先考慮其下載。高變化率意味著網頁可能已經被更新或者被取代。一些伺服器端軟體生成的URL(統一資源定位符)也使得網路爬蟲很難避免檢索到重複內容。(摘自:維基百科)
**爬蟲分析:**通過程式碼訪問網頁,將頁面內容儲存到本地。url是爬蟲識別網頁的重要標識,通過requests.get(url)獲取網頁的HTML程式碼,在通過BeautifulSoup解析HTML檔案獲取我們需要的內容,find()/find_all()是beautifulSoup的兩個重要方法。
知識點補充:
關於爬蟲中的headers:在使用python爬蟲爬取資料的時候,經常會遇到一些網站的反爬蟲措施,一般就是針對於headers中的User-Agent,如果沒有對headers進行設定,User-Agent會宣告自己是python指令碼,而如果網站有反爬蟲的想法的話,必然會拒絕這樣的連線。而修改headers可以將自己的爬蟲指令碼偽裝成瀏覽器的正常訪問,來避免這一問題。
關於爬蟲中的IP/proxies:在User Agent設定好後,還應該考慮一個問題,程式的執行速度是很快的,如果我們利用一個爬蟲程式在網站爬取東西,一個固定IP的訪問頻率就會很高,這不符合人為操作的標準,因為人操作不可能在幾ms內,進行如此頻繁的訪問。所以一些網站會設定一個IP訪問頻率的閾值,如果一個IP訪問頻率超過這個閾值,說明這個不是人在訪問,而是一個爬蟲程式。所以在我們需要爬取大量資料時,一個不斷更換ip的機制是必不可少的,我程式碼中的IP.txt檔案就是為這一機制準備的。
關於BeautifulSoup:簡單來說,Beautiful Soup是python的一個庫,最主要的功能是從網頁抓取資料。
Beautiful Soup提供一些簡單的、python式的函式用來處理導航、搜尋、修改分析樹等功能。它是一個工具箱,通過解析文件為使用者提供需要抓取的資料,因為簡單,所以不需要多少程式碼就可以寫出一個完整的應用程式。
Beautiful Soup自動將輸入文件轉換為Unicode編碼,輸出文件轉換為utf-8編碼。你不需要考慮編碼方式,除非文件沒有指定一個編碼方式,這時,Beautiful Soup就不能自動識別編碼方式了。然後,你僅僅需要說明一下原始編碼方式就可以了。
Beautiful Soup已成為和lxml、html6lib一樣出色的python直譯器,為使用者靈活地提供不同的解析策略或強勁的速度。
BeautifulSoup的安裝:
pip install beautifulsoup4