码迷,mamicode.com
首页 > 编程语言 > 详细

Python爬虫下载美女图片(多种方法)

时间:2018-01-13 18:49:44      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:创建文件   分享图片   XML   save   write   turn   下载   列表   splay   

声明:以下代码,Python版本3.6完美运行


一、思路介绍

  不同的图片网站设有不同的反爬虫机制,根据具体网站采取对应的方法

  1. 浏览器浏览分析地址变化规律

  2. Python测试类获取网页内容,从而获取图片地址

  3. Python测试类下载图片,保存成功则爬虫可以实现

 

二、豆瓣美女(难度:?)

  1.  网址:https://www.dbmeinv.com/dbgroup/show.htm

  浏览器里点击后,按分类和页数得到新的地址:"https://www.dbmeinv.com/dbgroup/show.htm?cid=%s&pager_offset=%s" % (cid, index)

  (其中cid:2-胸 3-腿 4-脸 5-杂 6-臀 7-袜子     index:页数)

 

  2. 通过python调用,查看获取网页内容,以下是Test_Url.py的内容 

 1 from urllib import request
 2 import re
 3 from bs4 import BeautifulSoup
 4 
 5 
 6 def get_html(url):
 7     req = request.Request(url)
 8     return request.urlopen(req).read()
 9 
10 
11 if __name__ == __main__:
12     url = "https://www.dbmeinv.com/dbgroup/show.htm?cid=2&pager_offset=2"
13     html = get_html(url)
14     data = BeautifulSoup(html, "lxml")
15     print(data)
16     r = r(https://\S+\.jpg)
17     p = re.compile(r)
18     get_list = re.findall(p, str(data))
19     print(get_list)

 

  通过urllib.request.Request(Url)请求网站,BeautifulSoup解析返回的二进制内容,re.findall()匹配图片地址

  最终print(get_list)打印出了图片地址的一个列表

 

  3. 通过python调用,下载图片,以下是Test_Down.py的内容

 1 from urllib import request
 2 
 3 
 4 def get_image(url):
 5     req = request.Request(url)
 6     get_img = request.urlopen(req).read()
 7     with open(E:/Python_Doc/Images/DownTest/001.jpg, wb) as fp:
 8         fp.write(get_img)
 9         print("Download success!")
10     return
11 
12 
13 if __name__ == __main__:
14     url = "https://ww2.sinaimg.cn/bmiddle/0060lm7Tgy1fn1cmtxkrcj30dw09a0u3.jpg"
15     get_image(url)

 

  通过urllib.request.Request(image_url)获取图片,然后写入本地,看到路径下多了一张图片,说明整个爬虫实现是可实现的

 

  4. 综合上面分析,写出完整爬虫代码 douban_spider.py

技术分享图片
 1 from urllib import request
 2 from urllib.request import urlopen
 3 from bs4 import BeautifulSoup
 4 import os
 5 import time
 6 import re
 7 
 8 
 9 # 全局声明的可以写到配置文件,这里为了读者方便看,故只写在一个文件里面
10 # 图片地址
11 picpath = rE:\Python_Doc\Images
12 # 豆瓣地址
13 douban_url = "https://www.dbmeinv.com/dbgroup/show.htm?cid=%s&pager_offset=%s"
14 
15 
16 # 保存路径的文件夹,没有则自己创建文件夹,不能创建上级文件夹
17 def setpath(name):
18     path = os.path.join(picpath, name)
19     if not os.path.isdir(path):
20         os.mkdir(path)
21     return path
22 
23 
24 # 获取html内容
25 def get_html(url):
26     req = request.Request(url)
27     return request.urlopen(req).read()
28 
29 
30 # 获取图片地址
31 def get_ImageUrl(html):
32     data = BeautifulSoup(html, "lxml")
33     r = r(https://\S+\.jpg)
34     p = re.compile(r)
35     return re.findall(p, str(data))
36 
37 
38 # 保存图片
39 def save_image(savepath, url):
40     content = urlopen(url).read()
41     # url[-11:] 表示截取原图片后面11位
42     with open(savepath + / + url[-11:], wb) as code:
43         code.write(content)
44 
45 
46 def do_task(savepath, cid, index):
47     url = douban_url % (cid, index)
48     html = get_html(url)
49     image_list = get_ImageUrl(html)
50     # 此处判断其实意义不大,程序基本都是人手动终止的,因为图片你是下不完的
51     if not image_list:
52         print(u已经全部抓取完毕)
53         return
54     # 实时查看,这个有必要
55     print("=============================================================================")
56     print(u开始抓取Cid= %s 第 %s 页 % (cid, index))
57     for image in image_list:
58         save_image(savepath, image)
59     # 抓取下一页
60     do_task(savepath, cid, index+1)
61 
62 
63 if __name__ == __main__:
64     # 文件名
65     filename = "DouBan3"
66     filepath = setpath(filename)
67 
68     # 2-胸 3-腿 4-脸 5-杂 6-臀 7-袜子
69     for i in range(2, 8):
70         do_task(filepath, i, 1)
View Code

  运行程序,进入文件夹查看,图片已经不停的写入电脑了!

 

  5. 分析:豆瓣图片下载用比较简单的爬虫就能实现,网站唯一的控制好像只有不能频繁调用,所以豆瓣不适合用多线程调用

      豆瓣还有一个地址:https://www.dbmeinv.com/dbgroup/current.htm有兴趣的小朋友可以自己去研究

 

三、MM131网(难度:??)

  1. 网址:http://www.mm131.com

  待完善......

 

四、煎蛋网(难度:??)

  1. 网址:http://jandan.net/ooxx

  待完善......

 

五、天极图片(难度:??)

  1. 网址:http://pic.yesky.com

  待完善......

 

六、总结和补充

  1. 获取网页内容有三种方式

    urllib.request.Request和urllib.request.urlopen

    ——速度快,很容易被发现,不能获取js执行后的网页内容

    requests带headers的请求方法

    ——速度快,可以实现伪装,不能获取js执行后的网页内容

    chrome headless方法

    ——速度慢,等于浏览器访问,可以获取js执行后的网页内容

Python爬虫下载美女图片(多种方法)

标签:创建文件   分享图片   XML   save   write   turn   下载   列表   splay   

原文地址:https://www.cnblogs.com/Vrapile/p/8279924.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!