手把手教你Python爬取女神套圖
疲憊的生活里總要有些溫柔夢想吧

目標(biāo)URL:http://www.win4000.com/meinvtag4_1.html
爬取美桌網(wǎng)某個(gè)標(biāo)簽下的美女壁紙,點(diǎn)進(jìn)詳情頁可以發(fā)現(xiàn),里面是一組套圖
一、網(wǎng)頁分析

翻頁查看 URL 變化規(guī)律:
http://www.win4000.com/meinvtag4_1.html
http://www.win4000.com/meinvtag4_2.html
http://www.win4000.com/meinvtag4_3.html
http://www.win4000.com/meinvtag4_4.html
http://www.win4000.com/meinvtag4_5.html
頁面里看到的每張圖片點(diǎn)擊進(jìn)去有詳情頁,里面是套圖


詳情頁里套圖URL變化規(guī)律:
http://www.win4000.com/meinv216987_1.html
http://www.win4000.com/meinv216987_2.html
http://www.win4000.com/meinv216987_3.html

在網(wǎng)頁源代碼中也可以直接找到數(shù)據(jù):

圖片名稱 下載鏈接
性感美女肌膚雪白撩人寫真圖片
http://pic1.win4000.com/pic/8/e0/24b989d57c.jpg
二、爬蟲基本思路

1. 獲取5頁的套圖的URL
def get_taotu_url():
for i in range(1, 6):
url = f'http://www.win4000.com/meinvtag4_{i}.html'
headers = {
'User-Agent': choice(user_agent)
}
# 發(fā)送請求 獲取響應(yīng)
rep = requests.get(url, headers=headers)
# print(rep.status_code) 狀態(tài)碼 200
# print(rep.text)
html = etree.HTML(rep.text)
taotu_url = html.xpath('//div[@class="tab_tj"]/div/div/ul/li/a/@href')
# 過濾掉無效的url
taotu_url = [item for item in taotu_url if len(item) == 39]
# 一個(gè)頁面有24個(gè)圖片
print(taotu_url, len(taotu_url), sep='\n')

2. 進(jìn)入套圖詳情頁爬取圖片
def get_img(url):
headers = {
'User-Agent': choice(user_agent)
}
# 發(fā)送請求 獲取響應(yīng)
rep = requests.get(url, headers=headers)
# 解析響應(yīng)
html = etree.HTML(rep.text)
# 獲取套圖名稱 最大頁數(shù)
name = html.xpath('//div[@class="ptitle"]/h1/text()')[0]
os.mkdir(r'./女神套圖/{}'.format(name))
max_page = html.xpath('//div[@class="ptitle"]/em/text()')
# 字符串替換 便于之后構(gòu)造url請求
url1 = url.replace('.html', '_{}.html')
for i in range(1, int(max_page[0]) + 1):
url2 = url1.format(i)
sleep(randint(1, 3))
reps = requests.get(url2, headers=headers)
dom = etree.HTML(reps.text)
src = dom.xpath('//div[@class="main-wrap"]/div[1]/a/img/@data-original')[0]
file_name = name + f'第{i}張.jpg'
img = requests.get(src, headers=headers).content
with open(r'./女神套圖/{}/{}'.format(name, file_name), 'wb') as f:
f.write(img)
print(f'成功下載圖片:{file_name}')
3. 完整代碼實(shí)現(xiàn)
# -*- coding: utf-8 -*-
"""
Created on Sat Nov 7 19:15:04 2020
微信公眾號: 凹凸數(shù)據(jù)
@File :spider.py
@Author :葉庭云
@CSDN :https://yetingyun.blog.csdn.net/
"""
import requests
from random import choice, randint
from lxml import etree
import os
from concurrent.futures import ThreadPoolExecutor
from time import sleep
# 自己構(gòu)造請求頭池 用于切換
user_agent = [
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6",
"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1",
"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"
]
# 不存在文件夾 就創(chuàng)建
if not os.path.exists('女神套圖'):
os.mkdir('女神套圖')
# 獲取5頁的套圖的URL
def get_taotu_url():
taotu_urls = []
for i in range(1, 6):
url = f'http://www.win4000.com/meinvtag4_{i}.html'
headers = {
'User-Agent': choice(user_agent)
}
# 發(fā)送請求 獲取響應(yīng)
rep = requests.get(url, headers=headers)
# print(rep.status_code) 狀態(tài)碼 200
# print(rep.text)
html = etree.HTML(rep.text)
taotu_url = html.xpath('//div[@class="tab_tj"]/div/div/ul/li/a/@href')
# 過濾掉無效的url
taotu_url = [item for item in taotu_url if len(item) == 39]
# 一個(gè)頁面有24個(gè)圖片
# print(taotu_url, len(taotu_url), sep='\n')
taotu_urls.extend(taotu_url)
return taotu_urls
# 進(jìn)入套圖詳情頁爬取圖片
def get_img(url):
headers = {
'User-Agent': choice(user_agent)
}
# 發(fā)送請求 獲取響應(yīng)
rep = requests.get(url, headers=headers)
# 解析響應(yīng)
html = etree.HTML(rep.text)
# 獲取套圖名稱 最大頁數(shù)
name = html.xpath('//div[@class="ptitle"]/h1/text()')[0]
os.mkdir(r'./女神套圖/{}'.format(name))
max_page = html.xpath('//div[@class="ptitle"]/em/text()')
# 字符串替換 便于之后構(gòu)造url請求
url1 = url.replace('.html', '_{}.html')
# 翻頁爬取這組套圖的圖片
for i in range(1, int(max_page[0]) + 1):
# 構(gòu)造url
url2 = url1.format(i)
# 休眠
sleep(randint(1, 3))
# 發(fā)送請求 獲取響應(yīng)
reps = requests.get(url2, headers=headers)
# 解析響應(yīng)
dom = etree.HTML(reps.text)
# 定位提取圖片下載鏈接
src = dom.xpath('//div[@class="main-wrap"]/div[1]/a/img/@data-original')[0]
# 構(gòu)造圖片保存的名稱
file_name = name + f'第{i}張.jpg'
# 請求下載圖片 保存圖片 輸出提示信息
img = requests.get(src, headers=headers).content
with open(r'./女神套圖/{}/{}'.format(name, file_name), 'wb') as f:
f.write(img)
print(f'成功下載圖片:{file_name}')
# 主函數(shù)調(diào)用 開多線程
def main():
taotu_urls = get_taotu_url()
with ThreadPoolExecutor(max_workers=4) as exector:
exector.map(get_img, taotu_urls)
print('=================== 圖片全部下載成功啦!=====================')
if __name__ == '__main__':
main()運(yùn)行效果如下:

程序運(yùn)行一會,圖片就全部爬取下來保存在本地文件夾,5頁的120組套圖,美滋滋。

四、其他說明
不建議抓取太多數(shù)據(jù),容易對服務(wù)器造成負(fù)載,淺嘗輒止即可。 通過本文爬蟲,可以幫助你了解套圖的爬取,如何通過字符串的拼接來構(gòu)造URL請求。 本文利用 Python 爬蟲實(shí)現(xiàn)批量下載女神套圖,實(shí)現(xiàn)過程中也會遇到一些問題,多思考和調(diào)試,最終解決問題,也能理解得更深刻。
推薦閱讀:
入門: 最全的零基礎(chǔ)學(xué)Python的問題 | 零基礎(chǔ)學(xué)了8個(gè)月的Python | 實(shí)戰(zhàn)項(xiàng)目 |學(xué)Python就是這條捷徑
干貨:爬取豆瓣短評,電影《后來的我們》 | 38年NBA最佳球員分析 | 從萬眾期待到口碑撲街!唐探3令人失望 | 笑看新倚天屠龍記 | 燈謎答題王 |用Python做個(gè)海量小姐姐素描圖 |
趣味:彈球游戲 | 九宮格 | 漂亮的花 | 兩百行Python《天天酷跑》游戲!
AI: 會做詩的機(jī)器人 | 給圖片上色 | 預(yù)測收入 | 碟中諜這么火,我用機(jī)器學(xué)習(xí)做個(gè)迷你推薦系統(tǒng)電影
年度爆款文案
點(diǎn)閱讀原文,領(lǐng)廖雪峰視頻資料!
評論
圖片
表情


