0
点赞
收藏
分享

微信扫一扫

Python《爬取各种帅哥图片》


今天我们来爬取http://www.shuaia.net/

但是我们今天只爬取图片http://www.shuaia.net/tp/ 下面均是分析过程。

按照之前的套路,我们先拿到所有的图片分类标签。

Python《爬取各种帅哥图片》_.net

点击【更多图片】即可得到所有图片的分类

Python《爬取各种帅哥图片》_Chrome_02

点击【动漫图片】的大分类进去

得到一整个页面,一个页面有个20个套图。所以我们先来搞定分页,如下:

Python《爬取各种帅哥图片》_python_03

再来对付每一个套图的入口

Python《爬取各种帅哥图片》_html_04

继续点击该套图,进去后发现所有的图片都是在一个网页上,嗯,挺方便。

Python《爬取各种帅哥图片》_爬虫_05

至此,分析完毕。

好了,我们先下载一张图片试试水。

Python《爬取各种帅哥图片》_爬虫_06

代码如下:

import requests

def run10():
headers = {
"Referer": "https://www.mm131.net/",
'User-Agent': "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36",
'Accept-Language': 'en-US,en;q=0.8',
'Cache-Control': 'max-age=0',
'Connection': 'keep-alive'
} ###设置请求的头部,伪装成浏览器
with open("D:/estimages/mn.jpg", "wb") as f :
f.write(requests.get("http://www.shuaia.net/d/file/kaifamei/202009/16002185322978467.jpg", headers=headers).content)
f.close

if __name__ == "__main__": #主程序入口
run10() #调用上面的run方法

效果可以。。。。

Python《爬取各种帅哥图片》_Chrome_07

完整代码如下:

# coding: utf-8
from concurrent.futures import ThreadPoolExecutor
import time
import os
import requests
from bs4 import BeautifulSoup

rootrurl = 'http://www.shuaia.net'
save_dir = 'D:/estimages/'
no_more_pages = 'END'
max_pages = 10

headers = {
"Referer": rootrurl,
'User-Agent': "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36",
'Accept-Language': 'en-US,en;q=0.8',
'Cache-Control': 'max-age=0',
'Connection': 'keep-alive'
} ###设置请求的头部,伪装成浏览器


def getAllTags(rootrurl):
taglist = {}
html = BeautifulSoup(requests.get(rootrurl + '/qm/moresc/', headers=headers).text.encode('iso-8859-1').decode('utf-8'),
features="html.parser")
a_s = html.find('div', {'class': 'g-big-box'}).find_all('a')
for a in a_s:
taglist[a.get('href')] = a.string
return taglist


def saveOneImg(dir, img_url):
img = requests.get(img_url, headers=headers) # 请求图片的实际URL
with open(
'{}/{}'.format(dir, img.url.split("/")[-1]), 'wb') as jpg: # 请求图片并写进去到本地文件
jpg.write(img.content)
print(img_url)


def saveImgGroup(dir, href):
new_headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
}
html = BeautifulSoup(requests.get(rootrurl + href, headers=new_headers).text.encode('iso-8859-1').decode('utf-8'),
features="html.parser")

# get total pages
imgs = html.find('div', {'class': 'm_qmview'}).find_all('img')

# directly get url of imgs
for img in imgs:
url = rootrurl + img.get('src')
saveOneImg(dir, url)


def saveOnePageFunc(dir, imgsPage):
for imgPage in imgsPage:
# 按照tag和图片组的内容来创建目录
new_dir = '{}{}/{}'.format(save_dir, dir, imgPage.get('title'))
if not os.path.exists(new_dir):
os.makedirs(new_dir)

saveImgGroup(new_dir, imgPage.get('href'))
pass


def tagSpider(tag, dir):

url = rootrurl + tag + 'index.html'
print(url)
while 1:
# 解析当前页面
html = BeautifulSoup(requests.get(url, headers=headers).text.encode('iso-8859-1').decode('utf-8'),
features="html.parser")

# 提交一个保存页面的任务
saveOnePageFunc(dir, html.find('ul', {'class': 'g-gxlist-imgbox'}).find_all('a', {'target': '_blank'}))

# 找到下一个页面的地址
next_page = html.find('div', {'class': 'tsp_nav'}).find_all('a')[-2]
if next_page.get_text() != '下一页':
break

url = rootrurl + next_page.get('href')

print("thread work over. ")


if __name__ == '__main__':

# 获得所有标签
taglist = getAllTags(rootrurl)
print(taglist)

# 给每个标签配备一个线程
with ThreadPoolExecutor(max_workers=10) as t: # 创建一个最大容纳数量为20的线程池
for tag, dir in taglist.items():
t.submit(tagSpider, tag, dir)

# 等待所有线程都完成。
while 1:
time.sleep(1)

效果如下:

Python《爬取各种帅哥图片》_python_08

Python《爬取各种帅哥图片》_.net_09


Python《爬取各种帅哥图片》_爬虫_10


举报

相关推荐

0 条评论