首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

开车开车!Python爬取妹子图

环境:Python3.6

模块:requests、beautifulsoup4

步骤

1.获取网页源码

用浏览器的F12可以看到网页的源码,但我们现在要用python这样做。

如果没问题的话结果会是这样类似

这些就是网页的源码了。

2.寻找所需信息

切换浏览器,右键‘查看网页源代码’,可以发现有很多这样的信息

那么我们只需要提取这些东西就可以了…but:我写不出这么复杂的正则!!!没关系,我们的神器BeautifulSoup要上场了!

我们的步骤是:将获取的源码转换为BeautifulSoup对象搜索需要的数据

这样就找到了当页所有套图的标题

3.进入下载

点进一个套图之后,发现他是每个页面显示一个图片。

比如http://www.mzitu.com/26685是某个套图的第一页,后面的页数都是再后面跟/和数字http://www.mzitu.com/26685/2(第二页),那么很简单了,我们只需要找到他一共多少页,然后用循环组成页数就OK了。

好了,那么我们接下来就是进行寻找图片地址并且保存了,右键妹纸图片,“检查”可以发现

那么这就是图片的具体地址了,那么我们的目的就要达成,保存它。

不出意外你脚本所在的地方会有12张图片

4.批量下载

上面讲了如何下载一个套图,其实所有的套图下载只是加上两重循环。成品如下:

#coding=utf-8

import requests

from bs4 import BeautifulSoup

import os

import sys

'''

#安卓端需要此语句

reload(sys)

sys.setdefaultencoding('utf-8')

'''

if(os.name == 'nt'):

print(u'你正在使用win平台')

else:

print(u'你正在使用linux平台')

header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 UBrowser/6.1.2107.204 Safari/537.36'}

#http请求头

start_html = requests.get(all_url,headers = header)

#保存地址

path = 'D:/mzitu/'

#找寻最大页数

soup = BeautifulSoup(start_html.text,"html.parser")

page = soup.find_all('a',class_='page-numbers')

max_page = page[-2].text

same_url = 'http://www.mzitu.com/page/'

for n in range(1,int(max_page)+1):

ul = same_url+str(n)

start_html = requests.get(ul, headers=header)

soup = BeautifulSoup(start_html.text,"html.parser")

all_a = soup.find('div',class_='postlist').find_all('a',target='_blank')

for a in all_a:

title = a.get_text() #提取文本

if(title != ''):

print("准备扒取:"+title)

#win不能创建带?的目录

#print('目录已存在')

flag=1

else:

os.makedirs(path+title.strip().replace('?',''))

flag=0

os.chdir(path + title.strip().replace('?',''))

href = a['href']

html = requests.get(href,headers = header)

mess = BeautifulSoup(html.text,"html.parser")

pic_max = mess.find_all('span')

pic_max = pic_max[10].text #最大页数

if(flag == 1 and len(os.listdir(path+title.strip().replace('?',''))) >= int(pic_max)):

print('已经保存完毕,跳过')

continue

for num in range(1,int(pic_max)+1):

pic = href+'/'+str(num)

html = requests.get(pic,headers = header)

mess = BeautifulSoup(html.text,"html.parser")

pic_url = mess.find('img',alt = title)

html = requests.get(pic_url['src'],headers = header)

file_name = pic_url['src'].split(r'/')[-1]

f = open(file_name,'wb')

f.write(html.content)

f.close()

print('完成')

print('第',n,'页完成')

作者:岚漾忆雨

声明:文章著作权归作者所有,如有侵权,请联系小编删除

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171227A0DPKS00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券