妹子圖數網頁爬取


任務:將妹子圖首頁展示的200多頁數據全部爬取下來

  • 在爬取的過程中,需要用到requests庫來獲取網頁
  • 使用bs庫來解析網頁
  • 隨后將圖片以圖集的形式保存到文件匯總

首先是獲取所有圖集url的函數

import requests
from bs4 import BeautifulSoup as bs
import threading
import time
import os
def get_base_url():
    """
   獲取妹子圖的所有圖集url,並返回url組成的列表
   """ url_list
= [] for i in range(3,232): url = "https://www.mzitu.com/" + str(i) headers = { "referer":"https://www.mzitu.com/193626", "user-agent":"chrome/10" } rsp = requests.get(url,headers=headers) soup = bs(rsp.text) for i in soup.select("dd"): url = i.a["href"] name = i.text url_list.append((name,url)) return url_list url_list = list(set(get_base_url())) # 對圖集去重,發現原本有4000+的url現在只有200+ 大大減少了任務量 print(len(url_list)) for i in url_list: print(i)

隨后定義了一個函數來對每一個 url 進行操作

在觀察了網頁源代碼之后,我發現了圖集的第一章圖的頁面構造和以后幾張圖的頁面構造是不一致的,因此我放棄了第一張圖的爬取,直接轉到獲取后面的圖片。如果要連同第一張圖的圖片也都獲取下來,只需要加一個 if 語句判定之后構建對應的代碼就可以獲得整個圖集。

def get_img(name,base_url):
    for i in range(2,100):
        url = base_url + "/" +  str(i)
        
        proxies = { "http": "http://111.160.169.54"} 
        headers = {
            "referer":base_url,
            "user-agent":"chrome/10"
        }
        rsp = requests.get(url,headers=headers,proxies=proxies)
        if rsp.status_code == 200:
            soup = bs(rsp.text)
            img_url = soup.select("div.main-image")[0].p.img["src"]
            print(img_url)
            rsp = requests.get(img_url,headers=headers,proxies=proxies)
            path = "meizitu" + "\\" + name
            if not os.path.exists(path):
                os.mkdir(path)

            path = "meizitu" + "\\" + str(name) + "\\" + str(i) + ".png"
            with open(path,"wb+") as f:
                f.write(rsp.content)
        else:
            break

然后就是主函數

url_list = set(url_list)
for i in url_list:
    t = threading.Thread(target=get_img,args=(i[0],i[1],))
    t.start()
    t.join()

這樣的話就可以得到所有的圖集了

缺陷:

在碰到文件的創建時,總是會出現意料之外的錯誤,觀察下來還是個人對python相關操作的理解不夠,然后我選擇遇到一個問題就解決一個問題,因此就不花時間去復習原本的內容了。

對文件的操作應該是如下所示

import os
path = "text"
if not os.path.exists(path):
    os.mkdir(path)

這樣就可以創建一個文件夾了,但是要注意的是,當你的path字符串是以斜杠結尾的時候,python是會報錯的,即使在字符串開頭加上了r轉義符也是如此,對應的解決辦法就是講斜杠挪出來,單獨作為一個字符串加入到員路徑字符串中,如此則可。

總結:

  1. 在昨天使用了獨創的楊氏編程法之后,獲益匪淺,一改之前手忙腳亂的常態,轉而成為了一個模塊編程的小小小小佬,我哈哈哈哈哈哈哈哈哈哈哈哈。
  2. 但是有時候還是會意氣用事,會失去目的,思維短時間內會陷入混亂以至於浪費了時間的同時也延緩了最終程序的構建,着實是一大毛病,是我成長路上的一大絆腳石,是需要着重重視的問題,是能夠在編程匯總保持良好心態的關鍵。希望自己以后能夠多加注意,但是不要試圖僅憑自己的意志力去抑制思維的發散,還可以適度借助外部工具的力量,比如思維導圖;比如帶有提示性的信息等等。不一而足。
  3. 哈哈哈哈哈哈哈哈刀哈哈哈哈哈哈哈哈哈諸位告辭。
  4. 要是有哪個小伙伴看到了之后,歡迎給我留言啊!!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM