1. 效果图
先看效果图,哈哈哈,是不是很有学习的欲望了,开干。
爬图的数量根据你输入的页数确定,纯洁的我只是适当的爬了几张学习技术。
效果图
2. 爬取妹子图片准备工作
- Python3.x
- Pycharm等随意一款编辑器
- os库、requests库、pyquery库
2.1 安装库
2.1.1 cmd安装方式
打开cmd控制台
打开cam控制台
在控制台分别输入以下代码:
pip install requests
pip install pyquery
安装requests库
安装pyquery库
其中,os库为Python3内置库,不需要安装,至此,准备工作完成。
2.1.2 pycharm安装方式
打开pycharm>file>settings
打开设置
搜索库
安装库
将所需库安装即可,至此,准备工作完成。
3. 开始编程
3.1 主函数
首先先确定目标:优美图库国内类别http://www.umei.cc/p/gaoqing/cn/
然后,观察规律:
第一页URL为http://www.umei.cc/p/gaoqing/cn
点下一页URL为http://www.umei.cc/p/gaoqing/cn/2.htm
再点下一页URL为http://www.umei.cc/p/gaoqing/cn/3.htm
观察规律
。。。。。。
然后再点击第一页发现网址变成了http://www.umei.cc/p/gaoqing/cn/1.htm
所以,我们就得到了屠龙技。代码如下:
# 控制代码运行过程,在文件作为脚本时才会被执行,而import到其他脚本中是不会被执行的
if __name__ == '__main__':
z = 1
url = 'http://www.umei.cc/p/gaoqing/cn/' # 初始目标URL
for i in range(z, z+1): # z+1可以换成z+n (n=1,2,3......)
url1 = url+str(i)+'.htm'
print(url1)
get_url1(url1) # 调用get_url1函数获取图片
3.2 编写图片抓取函数get_url1
然后我们还有找规律,我们点开第一页第一套图
目标
链接
为了简便,我们就爬取每页各个套图里的第一张图片,当然也可以爬取更多的图。我们可以发现各个套图里的第一张图片URL根本没有规律,所以,我们这是就要借助pyquery网页解析库啦。
我用的是谷歌浏览器,打开开发者工具,根据图片找到套图里第一张图片的链接,可以多找几张,你会发现他们好像有规律,我们只要搞到红框框里的链接就好啦。
开发者工具
链接
链接
所以函数get_url1代码如下
def get_url1(url):
# 模拟浏览器,不用改,几乎固定
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) '
'AppleWebKit/537.36 (KHTML, like Gecko)'
' Chrome/58.0.3029.110 Safari/537.36'
}
urllib3.disable_warnings() # 预警作用
html = requests.get(url, headers=headers, verify=False).text # 获得elements里的所有代码
doc = pq(html) # 解析代码
a = doc('.TypeList .TypeBigPics')
for item in a.items():
b = item.attr('href') # 获得herf里的所有代码
# print(b,'\n','\n')
html2 = requests.get(b,headers = headers,verify = False).text
doc2 = pq(html2)
c = doc2('.ImageBody img') # 获得ImageBody img里的代码
for item2 in c.items():
d = item2.attr('src') # 获得src里的链接
print(d)
# 保存文件
root = "D://pics22223//" # 根目录
path=root+d.split('/')[-1]
# 根目录加上url中以反斜杠分割的最后一部分,即可以以图片原来的名字存储在本地
try:
if not os.path.exists(root): # 判断当前根目录是否存在
os.mkdir(root) # 创建根目录
if not os.path.exists(path): # 判断文件是否存在
r=requests.get(d)
with open(path,'wb')as f:
f.write(r.content)
f.close()
print("文件保存成功",'\n','\n')
else:
print("文件已存在")
except:
print("爬取失败")
4. 完整代码
# -*- coding: utf-8 -*-
"""
Created on Sun Dec 30 15:38:25 2018
@author: 球球
"""
import requests
import os
from requests.packages import urllib3
from pyquery import PyQuery as pq
def get_url1(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) '
'AppleWebKit/537.36 (KHTML, like Gecko)'
' Chrome/58.0.3029.110 Safari/537.36'
}
urllib3.disable_warnings()
html = requests.get(url, headers=headers, verify=False).text
doc = pq(html)
a = doc('.TypeList .TypeBigPics')
for item in a.items():
b = item.attr('href')
# print(b,'\n','\n')
html2 = requests.get(b,headers = headers,verify = False).text
doc2 = pq(html2)
c = doc2('.ImageBody img')
for item2 in c.items():
d = item2.attr('src')
print(d)
root = "D://pics22223//" # 根目录
path=root+d.split('/')[-1]
# 根目录加上url中以反斜杠分割的最后一部分,即可以以图片原来的名字存储在本地
try:
if not os.path.exists(root): # 判断当前根目录是否存在
os.mkdir(root) # 创建根目录
if not os.path.exists(path): # 判断文件是否存在
r=requests.get(d)
with open(path,'wb')as f:
f.write(r.content)
f.close()
print("文件保存成功",'\n','\n')
else:
print("文件已存在")
except:
print("爬取失败")
if __name__ == '__main__':
z = 1
url = 'http://www.umei.cc/p/gaoqing/cn/'
for i in range(z, z+1):
url1 = url+str(i)+'.htm'
print(url1)
get_url1(url1)
网友评论