写在前面

前不久,公众号后台有妹子不高兴了,私信我说,我为什么会觉得我公众号的人都是喜欢看性感女人呢?什么时候发发性感男人啊。

想想也是,毕竟关注这个公众号有 15.6% 是妹纸呢。怎么能没有性感男人呢?

那么接下来就把你想要的帅哥,用 Python 把它们装进自己的电脑。

刚好看到这个地址:http://www.shuaige5.com/tag/xinggannanren/ ,发现里面的性感男人真的很性感。

答应我,先别激动好么?

分析帅哥图片地址

首先来分析一下我们要爬取的这些图片地址,通过 Chrome 的开发者工具可以看到这些图片的地址在 img 标签中,但是这个地址有点奇怪,在 src 里面还有一个 src 指向图片的地址,我们要的图片地址就是在第二个 src 指向的地址,所以我们的正则应该是这样:

1
'<div class="inner_wrapper_img inner_wrapper_img1">.*?<img.*?src="/e/ext.*?src=(.*?)&amp;h=240&amp;w=190&amp;zc=1".*?</div>'

当我们要点击下一页的时候呢,可以发现请求地址携带了一个参数 /index_2.html ,所以我们可以通过这个变量来获取多页的图片数据。

爬取性感男人图片

那么分析完之后我们就开始下手吧,我们可以创建一个叫做 shuaige 的图片文件夹,专门来放这些帅哥的

1
2
os.mkdir(dirName)
os.chdir(dirName)

接着我们可以定义几个变量:

1
2
3
pageNumber = 2 #用于获取不同页数的图片
x = 0 #用于图片名称
img_address = [] #存放爬取到的图片地址

比如我们想要获取第 2 到第 4 张图片,那么我们就可以写一个循环来获取数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
while pageNumber < 5 :
page_url = url + '/index_'+str(pageNumber)+'.html' #获取不同页数的图片
addrs = find_imgs(page_url) #获取地址

for i in addrs:
if i in img_address :
continue
else:
img_address.append(i) # 降低至存追加到img_address这个变量里面

pageNumber += 1


for each in img_address:
filename = str(x) + ".jpg"
x+=1
with open(filename,'wb') as f: # 将图片写入文件夹
img = url_open(each).content
f.write(img)

ok,我们来运行一下,可以看到在我们的项目目录中创建了一个叫做 shuaige 的文件夹,python 正在下载我们要爬取的图片:

打开文件夹一看,一堆性感男人都有了:

友情提示:小爬怡情,大爬伤身!

完整代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import os
import re
import requests


def url_open(url):

# 以字典的形式添加请求头
header = {
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0"
}
# 使用get方法发送请求获取网页源码
response = requests.get(url, headers=header)
return response


def find_imgs(url):
html = url_open(url).text
pattern = re.compile('<div class="inner_wrapper_img inner_wrapper_img1">.*?<img.*?src="/e/ext.*?src=(.*?)&amp;h=240&amp;w=190&amp;zc=1".*?</div>',re.S)
img_addrs = re.findall(pattern, html)

return img_addrs


def download_shuaige(dirName="shuaige"):
os.mkdir(dirName)
os.chdir(dirName)

pageNumber = 2
x = 0
img_address = []

while pageNumber < 5 :
page_url = url + '/index_'+str(pageNumber)+'.html'
addrs = find_imgs(page_url)
print(len(addrs))

for i in addrs:
if i in img_address :
continue
else:
img_address.append(i)
print(len(img_address))
for each in img_address:
print(each)

pageNumber += 1


for each in img_address:
filename = str(x) + ".jpg"
x+=1
with open(filename,'wb') as f:
img = url_open(each).content
f.write(img)


if __name__ == '__main__':
url = "http://www.shuaige5.com/tag/xinggannanren"
download_shuaige()

相关