Python《爬蟲初實踐》
今天轉轉悠悠,突然不知道該學些什麼,偶然的一瞬間腦子裡想到了爬蟲,這個我很早就瞭解的技術,我卻沒有親自實踐過,於是這次想好好地去了解下,學習下簡單的使用方法,畢竟自以後的深度學習中也是有用處的,爬取圖片來做資料來源。
一:簡單入手
網路的上的圖片都有所在伺服器URL。
我們首先得獲得一個可以發起HTTP請求的辦法,我們使用requests包的方法。
做個簡單的實驗,把www.baidu.com的首頁HTML請求下來。
import requests #匯入模組
def run(): #宣告一個run方法
response = requests.get("http://www.baidu.com")
print(response.text)
if __name__ == "__main__": #主程式入口
run() #呼叫上面的run方法
發現是可以的。
然後我們去一個圖片網站上去爬取一些圖片下來,剛剛我們是爬取HTML,現在我們嘗試爬取圖片
import requests #匯入模組
def run2():
response = requests.get("http://wx3.sinaimg.cn/large/0076BSS5ly1gliowcgks1j30u0112wjn.jpg")
with open("D:/estimages/mn.jpg", "wb") as f :
f.write(response.content)
f.close
if __name__ == "__main__": #主程式入口
run2() #呼叫上面的run方法
圖片也是順利下載了,我們看一看
二:實戰操作
我們今天要爬取的是網站http://jandan.net/ooxx,這裡有很多評論內容,每個評論下都是有一張圖片的,而且評論內容很多,都有分頁了,有分頁也不怕,因為分頁的內容都是一樣的,我們來細看。
網頁內容有分頁
檢查原始碼如下:
也就是如果我們想跳到下一頁面,只需要把這個“下一頁”的< a>的herf連結值得到,重新使用request請求一下這個連結值就能調到下一頁面,迴圈執行的話,就能不斷根據連線進行爬取。
經過觀察,每個下一頁的< a>標籤都屬於一個previous-comment-page的calss,這個很重要,能方便BeautifulSoup直接能獲取該元素。
每個頁面分頁欄下面接著就是一個大的評論區,每個評論都是有一張圖片,很規律。
檢查原始碼如下:
可以看出來這是一個comment列表,每一個comment都有一個ID。
我們需要進去每一個ID去看看圖片的位置和內容,如下:
經過觀察,每個圖片的src url值和【檢視原圖】的herf url值是一樣的,【檢視原圖】的< a>值都是屬於一個view-img-link的calss,這個很重要,能方便BeautifulSoup直接能獲取該元素。
BeautifulSoup是一個方便能直接訪問HTML元素的包。
配合上requests就能實現一個簡單的圖片爬取功能了。
完整原始碼如下:
直接上程式碼學習BeautifulSoup和request的用法吧。
import os
import requests
from bs4 import BeautifulSoup
class Config:
page_num = 3
save_dir = 'D:\estimages'
opt = Config()
if not os.path.exists(opt.save_dir):
os.mkdir(opt.save_dir)
# 設定URL的請求頭
headers = {'referer': 'http://jandan.net/',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0'}
# 這是一個集合,不能重複,也就是不能重複設定
image_cache = set()
index = len(image_cache)
# 儲存圖片
def save_all_images(html, idx):
global index
for link in html.find_all('a', {'class': 'view_img_link'}):
href = link.get('href')
if href not in image_cache:
print("image: http:" + href)
with open(
'{}/{}'.format(opt.save_dir, href.split("/")[-1]), 'wb') as jpg: # 請求圖片並寫進去到本地檔案
jpg.write(requests.get("http:" + href).content)
image_cache.add(href)
print("正在抓取第%s條資料" % index)
index += 1
def findAnotherPage(html):
ahref = html.find('a', {'class': 'previous-comment-page'}) # 找到導航條的位置,獲得下一個連線網頁的位置
if ahref is None:
print('no more page')
exit(0)
else:
url = "http:" + ahref.get('href')
print("next page: " + url)
return url
if __name__ == '__main__':
url = 'http://jandan.net/ooxx'
for i in range(0, opt.page_num):
html = BeautifulSoup(requests.get(url, headers=headers).text, features="html.parser")
save_all_images(html, i)
url = findAnotherPage(html)
程式碼步驟如下:
1:設定必要的引數,比如我們需要爬取幾個頁面,圖片在本地的儲存位置。
2:設定一個set集合,圖片不能重複,因此每下載一張圖片就記錄這個圖片的url。
3:真正下載的時候,每調到一個頁面就把該頁面的comment區域的所有圖片請求下;來。
4:根據分頁欄的下一頁面地址,調到新的頁面,重複執行第三步驟。
下載的時候我們把原始檔名完整儲存了下來,並且把url記錄在set,避免重複下載。
效果如下:
相關文章
- Python爬蟲實踐--爬取網易雲音樂Python爬蟲
- Python爬蟲實踐-網易雲音樂Python爬蟲
- Python Scrapy 爬蟲(二):scrapy 初試Python爬蟲
- Python爬蟲開發與專案實踐(3)Python爬蟲
- 《Python開發簡單爬蟲》實踐筆記Python爬蟲筆記
- Python 爬蟲實戰Python爬蟲
- 爬蟲初識爬蟲
- 【Python學習】爬蟲爬蟲爬蟲爬蟲~Python爬蟲
- python爬蟲實戰,爬蟲之路,永無止境Python爬蟲
- python爬蟲-33個Python爬蟲專案實戰(推薦)Python爬蟲
- Python爬蟲怎麼入門-初級篇Python爬蟲
- python初級爬蟲之貓眼電影Python爬蟲
- python爬蟲實踐: 豆瓣小組命令列客戶端Python爬蟲命令列客戶端
- 北郵《Python程式設計與實踐》——爬蟲學習Python程式設計爬蟲
- python爬蟲實戰教程-Python爬蟲開發實戰教程(微課版)Python爬蟲
- 不踩坑的Python爬蟲:Python爬蟲開發與專案實戰,從爬蟲入門 PythonPython爬蟲
- Python網路爬蟲實踐案例:爬取貓眼電影Top100Python爬蟲
- python爬蟲---網頁爬蟲,圖片爬蟲,文章爬蟲,Python爬蟲爬取新聞網站新聞Python爬蟲網頁網站
- python3網路爬蟲開發實戰_Python3 爬蟲實戰Python爬蟲
- python就是爬蟲嗎-python就是爬蟲嗎Python爬蟲
- Python爬蟲教程-05-python爬蟲實現百度翻譯Python爬蟲
- python網路爬蟲應用_python網路爬蟲應用實戰Python爬蟲
- Python網路爬蟲實戰Python爬蟲
- python 爬蟲實戰的原理Python爬蟲
- Python爬蟲實戰之bilibiliPython爬蟲
- 初識爬蟲類CrawlSpider爬蟲IDE
- python 爬蟲Python爬蟲
- python爬蟲Python爬蟲
- 2個月精通Python爬蟲——3大爬蟲框架+6場實戰+反爬蟲技巧+分散式爬蟲Python爬蟲框架分散式
- python3 爬蟲實戰:為爬蟲新增 GUI 影象介面Python爬蟲GUI
- 【Python學習筆記1】Python網路爬蟲初體驗Python筆記爬蟲
- Python爬蟲初學二(網路資料採集)Python爬蟲
- python爬蟲實操專案_Python爬蟲開發與專案實戰 1.6 小結Python爬蟲
- python的爬蟲功能如何實現Python爬蟲
- Python【爬蟲實戰】提取資料Python爬蟲
- Python爬蟲是如何實現的?Python爬蟲
- python實現selenium網路爬蟲Python爬蟲
- Python網路爬蟲實戰專案大全 32個Python爬蟲專案demoPython爬蟲