用Python爬取妹子图所有大图

昨天我用python写了一个爬取妹子图网站图片的爬虫,是一个非常简陋的爬虫。
下边把我写的烂程序分享给大家,望给我做些评价。
我写的这个程序分为两个python文件,一个用来把图片文章的列表页网址给解析出来保存到一个python的list里边,并且用json库把这个list保存进一个json文件内。另一个python文件是用来解析并且下载图片文章详情页的所有大图。

GIF

第一个python文件(meizitu.py)

 

'''爬取“妹子图”http://www.meizitu.com/ 所有大图
1.列表页面:http://www.meizitu.com/a/more_1.html
*more_{num}.html其中num从1-72
*列表页小图链接在<div class="pic">下边(链接指向详情页面)
2.列表详情页面:http://www.meizitu.com/a/38.html
*{num}.html,其中num是详情页面的id
*大图在<div class="postContent">下边
*大图的img属性中有class="scrollLoading"我们就用这个属性来找到我们需要的图片
*文章标题在<div class="postmeta clearfix">下边
*我们把图片的文件名用文章标题加上数字进行重命名,另外去除标题中的空格和不符合文件名的符号
'''
import requests
from bs4 import BeautifulSoup
import json

list_link_num = 'http://www.meizitu.com/a/more_{num}.html'
list_link = [list_link_num.format(num=i) for i in range(1, 73)]
details_link = []

def get_list_index(list1, lists):
num = lists.index(list1) + 1
return num

def get_list_page_img_link(html):
soup = BeautifulSoup(html, 'lxml')
for link in soup.findAll('div', class_='pic'):
for a in link.findAll('a'):
details_link.append(a.attrs['href'])
print(len(details_link))

for link_list in list_link:
r = requests.get(link_list, headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36'})
r.encoding = r.apparent_encoding
print('状态: %s\n' % r.status_code)
print('第 %d 个网页下载成功' %(get_list_index(link_list, list_link)))
get_list_page_img_link(r.text)

with open('./test.json', 'w') as f:
json.dump(details_link, f, indent=4)

f.close()

 

第二个文件(test.py)

import json
import requests
from bs4 import BeautifulSoup
import time

headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36'}
download_path = 'd://image//'
download_count = 1
#link = []
with open('./test.json', 'r') as f:
link = json.load(f)

f.close()
#print(link)

def writeImage(path, img):
with open(path, 'wb') as f:
f.write(img)
f.close()

for a in link:
r = requests.get(a, headers=headers)
soup = BeautifulSoup(r.text, 'lxml')
for img_parent in soup.findAll('div', id='picture'):
for img in img_parent.findAll('img'):
print('正在下载第: %d 张美女的图片' % download_count)
img_link = img.attrs['src']
img_name_list = img_link.split('/')
img_file_name = img_name_list[-4] + img_name_list[-3] + img_name_list[-2] + img_name_list[-1]
#time.sleep(1)
try:
r_img = requests.get(img_link, headers=headers, timeout=10)
r_img.raise_for_status()
except:
print('链接异常')
path = download_path + img_file_name
writeImage(path, r_img.content)
print('第:%d 张美女的图片已下载完成, 赶快去看看吧!' % download_count)
download_count += 1
#print('还剩%d 张没有下载' % len(img_parent.findAll('img')) - download_count)

 

下载后存储的json文件(test.json)

这个文件的内容就不分享了,因为太长了有将近3000行。

图片一共爬取了1.5万多张。

评论

  • 还没有任何评论,来说两句吧。

  • 0%