python項目-爬取妹子圖

最近在學爬蟲,寫了一個爬取妹子圖片

功能:自動下載妹子圖,並自動命名

網址:http://www.netbian.com/meinv/

#!/usr/bin/env python 
# -*- coding:utf-8 -*-
# 爬取妹子圖
# url:http://www.netbian.com/meinv/
# http://www.netbian.com/meinv/index_2.htm
import urllib.request
import urllib.parse
from bs4 import BeautifulSoup
import re


def main():
    # 輸入網址得到服務器返回的數據
    allurl()
    # 解析數據得到圖片鏈接和圖片名稱
    # 保存圖片到本地,圖名做相應修改


# 圖片鏈接格式
findImg = re.compile(r'src="(.*?)"', re.S)
# 圖片名稱格式
findName = re.compile(r"<b>(.*?)</b>", re.S)


def findurl(url):
    """一個網頁的爬取(後面用for爬取所有網頁)"""
    # head僞裝
    headers = {
        'User-Agent': "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) "
                      "Chrome/78.0.3904.108 Safari/537.36"}

    req = urllib.request.Request(url=url, headers=headers)  # 發送信息的預處理
    response = urllib.request.urlopen(req)  # 得到整個網頁
    # 讀取網頁並解碼
    html = response.read().decode(encoding='gb18030')  # 使用'utf-8'無法解碼,換爲'gb18030'
    return html


def allurl():
    """循環爬取所有網頁"""

    for i in range(3):
        url = "http://www.netbian.com/meinv/index_"+str(i+2)+".htm"
        html = findurl(url)  # 獲取一個網頁
        # print(html)   # 測試:是否獲取到網頁

        # 解析數據得到圖片鏈接和圖片名稱
        bs = BeautifulSoup(html, "html.parser")  # 將網頁解析爲樹形
        t_list = bs.select("li>a")  # 找到標籤li中的所有子標籤a,做成列表
        t_list = t_list[-17:-1]
        # print(t_list)     # 測試:當前網頁所有妹子圖放入列表(每頁17個)
        # 對每個妹子進行正則表達式提取(鏈接及名稱)
        for item in t_list:
            item = str(item)  # 正則表達式是對字符串操作,所以先轉化爲字符串
            # 提取圖片名
            name = re.findall(findName, item)
            # 提取鏈接,並下載
            img = re.findall(findImg, item)
            savejpg(name, img)


def imgurl(url):
    """獲取圖片鏈接下載圖片"""
    # head僞裝
    headers = {
        'User-Agent': "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) "
                      "Chrome/78.0.3904.108 Safari/537.36"}
    req = urllib.request.Request(url=url, headers=headers)  # 發送信息的預處理
    response = urllib.request.urlopen(req)  # 得到圖片鏈接
    # 二進制形式讀取鏈接
    html = response.read()
    return html


def savejpg(name, img):
    """得到名字和鏈接存儲圖片"""
    # print(name, img)  # 測試:輸出圖名及對應鏈接
    meizi = imgurl(img[0])     # 獲取圖片鏈接

    with open('D:\FishC\項目\爬取妹子圖\爬取妹子的結果\{0}.jpg'.format(name[0]), 'wb') as f:
        f.write(meizi)


if __name__ == '__main__':
    # 主函數
    main()

爬取結果:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章