最讓人喜歡的Python爬蟲案例沒有之一: 爬取妹子圖

来源:https://www.cnblogs.com/Python6359/archive/2018/06/06/9148087.html
-Advertisement-
Play Games

曾經有人問我,為什麼要學習Python!我說:"因為我想學習爬蟲!""那你為什麼學習爬蟲呢?""因為可以批量下載很多很多妹子圖!"其實我都是為了學習,都是為了讓自己能更好的掌握Python,練手的項目!Emmmmm....沒錯,是為了學習 除了Python還能用什麼語言寫爬蟲? C,C++。高效率, ...


曾經有人問我,為什麼要學習Python!
我說:"因為我想學習爬蟲!"
"那你為什麼學習爬蟲呢?"
"因為可以批量下載很多很多妹子圖!"
其實我都是為了學習,都是為了讓自己能更好的掌握Python,練手的項目!
Emmmmm....沒錯,是為了學習

除了Python還能用什麼語言寫爬蟲?

  • C,C++。高效率,快速,適合通用搜索引擎做全網爬取。缺點,開發慢,寫起來又臭又長,例如:天網搜索源代碼。
  • 腳本語言:Perl, Python, Java, Ruby。簡單,易學,良好的文本處理能方便網頁內容的細緻提取,但效率往往不高,適合對少量網站的聚焦爬取
  • C#?(貌似信息管理的人比較喜歡的語言)

那為什麼最終選擇Python?

我只想說:人生苦短,我用Python!

那怎麼爬取美膩的小姐姐照片呢?
其實爬蟲不難,主要就那麼幾個步驟
1、打開網頁,獲取源碼
2、獲取圖片
3、保存圖片地址與下載圖片

 準備開車!

用到的模塊

1 import os
2 import re
3 import requests
4 from bs4 import BeautifulSoup

模塊安裝

1 pip install requests
2 Pip install bs4

直接上主菜

  1 # -*- coding: utf-8 -*-
  2 import os
  3 import re
  4 import requests
  5 from bs4 import BeautifulSoup
  6 
  7 save_folder = r'./'
  8 domain_name = 'http://www.27270.com/ent/meinvtupian/'
  9 start_url = 'http://www.27270.com/ent/meinvtupian/'
 10 # 'http://699pic.com/tupian/biyeji.html'
 11 # http://www.27270.com/ent/meinvtupian/
 12 
 13 headers = {
 14     'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
 15     'Accept-Encoding': 'gzip, deflate, sdch',
 16     'Accept-Language': 'zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4',
 17     'Connection':'keep-alive',
 18     'DNT': '1',
 19     'Host': 'www.kongjie.com',
 20     'Referer': 'http://www.kongjie.com/home.php?mod=space&do=album&view=all&order=hot&page=1',
 21     'Upgrade-Insecure-Requests': '1',
 22     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
 23 }
 24 uid_picid_pattern = re.compile(r'.*?uid=(\d+).*?picid=(\d+).*?')
 25 
 26 
 27 
 28 def save_img(image_url, uid, picid):
 29     """
 30     保存圖片到全局變數save_folder文件夾下,圖片名字為“uid_picid.ext”。
 31     其中,uid是用戶id,picid是空姐網圖片id,ext是圖片的擴展名。
 32     Python學習交流群:125240963,群內每天分享乾貨,包括最新的python企業案例學習資料和零基礎入門教程,歡迎各位小伙伴入群學習交流
 33     """
 34     try:
 35         response = requests.get(image_url, stream=True)
 36         # 獲取文件擴展名
 37         file_name_prefix, file_name_ext = os.path.splitext(image_url)
 38         save_path = os.path.join(save_folder, uid + '_' + picid + file_name_ext)
 39         with open(save_path, 'wb') as fw:
 40             fw.write(response.content)
 41         print(uid + '_' + picid + file_name_ext, 'image saved!', image_url)
 42     except IOError as e:
 43         print('save error!', e,"111", image_url,"222")
 44 
 45 
 46 def save_images_in_album(album_url, count):
 47     """
 48     進入空姐網用戶的相冊,開始一張一張的保存相冊中的圖片。
 49     """
 50     # 解析出uid和picid,用於存儲圖片的名字
 51     response = requests.get(album_url)
 52     soup = BeautifulSoup(response.text, 'lxml')
 53     image_div = soup.select('.articleV4Body img')
 54 
 55     for image in image_div:
 56         print(image.attrs['src'])
 57         try:
 58             response = requests.get(image.attrs['src'])
 59             save_path = os.path.join(save_folder, str(count) + '.jpg')
 60             with open(save_path, 'wb') as fw:
 61                 fw.write(response.content)
 62         except IOError as e:
 63             print('save error!', e, "222")
 64 
 65 
 66 
 67 
 68     # next_image = soup.select_one('div.pns.mlnv.vm.mtm.cl a.btn[title="下一張"]')
 69     # if not next_image:
 70     #     return
 71     # # 解析下一張圖片的picid,防止重覆爬取圖片,不重覆則抓取
 72     # next_image_url = next_image['href']
 73     # next_uid_picid_match = uid_picid_pattern.search(next_image_url)
 74     # if not next_uid_picid_match:
 75     #     return
 76     # next_uid = next_uid_picid_match.group(1)
 77     # next_picid = next_uid_picid_match.group(2)
 78     # # if not redis_con.hexists('kongjie', next_uid + ':' + next_picid):
 79     # save_images_in_album(next_image_url)
 80 
 81 
 82 def parse_album_url(url):
 83     """
 84     解析出相冊url,然後進入相冊爬取圖片
 85     """
 86     response = requests.get(url)
 87     soup = BeautifulSoup(response.text, 'lxml')
 88     people_list = soup.select('li a.tit')
 89     count = 0
 90     for people in people_list:
 91         save_images_in_album(people.attrs['href'], count)
 92         count = count + 1
 93         # break
 94 
 95     # # 爬取下一頁
 96     # next_page = soup.select_one('a.nxt')
 97     # if next_page:
 98     #     parse_album_url(next_page['href'])
 99 
100 if __name__ == '__main__':
101     parse_album_url(start_url)

運行結果

小姐姐的照片

看了小姐姐的照片,我甚至欣慰:果然沒有選錯語言

 
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2677 Accepted Submission(s): 1208 Problem Descrip ...
  • 發奮忘食,樂以忘優,不知老之將至。———《論語》 前面幾篇已經介紹了關於線程安全和同步的相關知識,那麼有了這些概念,我們就可以開始著手設計線程安全的類。本文將介紹構建線程安全類的幾個方法,並說明他的區別。 我要講的這幾個構建線程安全類的方式是: 另外,在設計線程安全類的過程中,我們需要考慮下麵三個基 ...
  • 題目描述 計算積分 結果保留至小數點後6位。 數據保證計算過程中分母不為0且積分能夠收斂。 輸入輸出格式 輸入格式: 一行,包含6個實數a,b,c,d,L,R 輸出格式: 一行,積分值,保留至小數點後6位。 輸入輸出樣例 輸入樣例#1: 複製 1 2 3 4 5 6 輸出樣例#1: 複製 2.732 ...
  • 當我們談論到應用程式的架構的時候,經常會問到一個經典的問題,那就是“這段代碼應該放在哪裡比較好”。 因為 Laravel 是一個相當靈活的框架,所以要回答這個問題其實沒那麼容易。我應該把我的業務邏輯寫在 Model 層,還是 Controller 層,或者是其他地方? 當你的應用程式僅有一個接入點, ...
  • 繼上一篇自己動手寫Java String類之後,今晚10點鐘下班,感覺稍早,於是手癢癢就想自己動手來寫StringBulder,畢竟程式員啥都講究自己動手才能豐衣足食嘛!StringBuilder與String類的區別是String的變數內容是放在final char[]裡面的,而StringBui... ...
  • java 類修飾符:通常情況下使用 public 修飾,此時,java 強制要求 .java 文件名需與該 public 修飾類名一致,否則無法編譯通過。如若沒有加修飾符,文件名與類名可無任何關聯。 .java 文件建議僅聲明單個類,不要在同一個類文件,創建多個類。 PATH 添加時,可旋轉在當前 ...
  • 1 import java.io.File; 2 import java.text.DateFormat; 3 import java.util.Date; 4 5 public class FileDemo { 6 public static void main(String[] args) th... ...
  • Java中static使用方法一:Java中的static使用之靜態變數;二:Java中的static使用之靜態方法;三:Java中的static使用之靜態初始化快; ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...