Python3网络爬虫(十):这个帅哥、肌肉男横行的世界(爬取帅哥图)

"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

Python3网络爬虫(十):这个帅哥、肌肉男横行的世界(爬取帅哥图) - Jack-Cui
- 博客频道 - CSDN.NET

Jack-Cui

努力-是为了将运气成分降到最低

【活动】2017 CSDN博客专栏评选

&nbsp

【5月书讯】流畅的Python,终于等到你!
   &nbsp

CSDN日报20170519 ——《思维的局限》

   &nbsp

Kotlin 专场

Python3网络爬虫(十):这个帅哥、肌肉男横行的世界(爬取帅哥图)

标签:
Python3网络爬虫爬图片

2017-05-21 12:28
119人阅读
评论(2)
收藏
举报

本文章已收录于:

.embody{
padding:10px 10px 10px;
margin:0 -20px;
border-bottom:solid 1px #ededed;
}
.embody_b{
margin:0 ;
padding:10px 0;
}
.embody .embody_t,.embody .embody_c{
display: inline-block;
margin-right:10px;
}
.embody_t{
font-size: 12px;
color:#999;
}
.embody_c{
font-size: 12px;
}
.embody_c img,.embody_c em{
display: inline-block;
vertical-align: middle;
}
.embody_c img{
width:30px;
height:30px;
}
.embody_c em{
margin: 0 20px 0 10px;
color:#333;
font-style: normal;
}


分类:

Python(21)

作者同类文章X

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载请注明作者和出处: http://blog.csdn.net/c406495762

运行平台: Windows

Python版本: Python3.x

IDE: Sublime text3

  • 前言
  • 预备知识
  • 实战
    • 1 背景
    • 2 requests安装
    • 3 爬取单页目标连接
    • 4 爬取多页目标连接
    • 5 单张图片下载
    • 6 整体代码
  • 总结

1 前言

之前,感觉网上类似于《爬取妹子图》这样的爬虫教程有很多,所以我就没有写爬取图片的实战教程。 最近,有关注我爬虫教程的朋友说,希望我可以出个爬取图片的教程。那么,今天就谈一谈如何爬取图片吧。其实爬取图片相对于一些抓包分析的东西,还是简单很多的,只要找到图片的地址,我们就能够下载下来。别人的爬取图片教程都是爬取《妹子图》,有爬“煎蛋”网的,有爬“妹子图”网的,妹子图片那叫一个劲爆啊!可谓目不暇接。看的我身体也一天不如一天了。出于对广大朋友身体的考虑,今天咱就不爬妹子图了,咱爬《帅哥图》!(PS:我不会告诉你,我是想看看我有没有美女程序员光临!)

2 预备知识

为了也能够学习到新知识,本次爬虫教程使用requests第三方库,这个库可不是Python3内置的urllib.request库,而是一个强大的基于urllib3的第三方库。

requests库的基础方法如下:

官方中文教程地址:http://docs.python-requests.org/zh_CN/latest/user/quickstart.html

因为官方给出的《快速上手》教程已经整理的很好了,并且本次教程使用的也是最简单的requests.get(),因此第三方库requests的使用方法,不再累述。详情请看官方中文教程,有urllib2基础的人,还是好上手的。

3 实战

3.1 背景

爬取《帅啊》网的帅哥图片!

URL : http://www.shuaia.net/index.html

先看一眼网站的样子:

3.2 requests安装

在cmd中,使用如下指令安装第三方库requests:

pip3 install requests

或者:

easy_install requests

3.3 爬取单页目标连接

通过审查元素,我们不难发现,目标的地址存储在class属性为”item-img”的<a>标签的href属性中。这时候,有人可能会问为啥不用下面的<img>标签的src属性?因为这个图片是首页的浏览图片,根据这个地址保存下来的图片,太小了,并且不清清楚。秉承着热爱“高清无码”的精神,这种图片可不是我想要的。因此,先获取目标的地址,也就是我们点击图片之后,进入的网页地址,然后根据下一个网页,找到图片的地址。

代码:

# -*- coding:UTF-8 -*-
from bs4 import BeautifulSoup
import requests

if __name__ == ‘__main__‘:
    url = ‘http://www.shuaia.net/index.html‘
    headers = {
            "User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
    }
    req = requests.get(url = url,headers = headers)
    req.encoding = ‘utf-8‘
    html = req.text
    bf = BeautifulSoup(html, ‘lxml‘)
    targets_url = bf.find_all(class_=‘item-img‘)
    list_url = []
    for each in targets_url:
        list_url.append(each.img.get(‘alt‘) + ‘=‘ + each.get(‘href‘))
    print(list_url)

我们将爬取的信息保存到list中,图片名字和图片地址使用”=”连接,运行结果:

3.4 爬取多页目标连接

翻到第二页的时候,很容易就发现地址变为了:www.shuaia.net/index_2.html。第三页、第四页、第五页依此类推。

代码:

# -*- coding:UTF-8 -*-
from bs4 import BeautifulSoup
import requests

if __name__ == ‘__main__‘:
    list_url = []
    for num in range(1,20):
        if num == 1:
            url = ‘http://www.shuaia.net/index.html‘
        else:
            url = ‘http://www.shuaia.net/index_%d.html‘ % num
        headers = {
                "User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
        }
        req = requests.get(url = url,headers = headers)
        req.encoding = ‘utf-8‘
        html = req.text
        bf = BeautifulSoup(html, ‘lxml‘)
        targets_url = bf.find_all(class_=‘item-img‘)

        for each in targets_url:
            list_url.append(each.img.get(‘alt‘) + ‘=‘ + each.get(‘href‘))
    print(list_url)

我们少爬取一些,爬取前19页的目标连接:

3.5 单张图片下载

进入目标地址,审查元素。可以看到,图片地址保存在了class属性为”wr-single-content-list “的div->div->img的src属性中。

代码:

target_url = ‘http://www.shuaia.net/rihanshuaige/2017-05-18/1294.html‘
filename = ‘张根硕拍摄机车型男写真帅气十足‘ + ‘.jpg‘
headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
    }
img_req = requests.get(url = target_url,headers = headers)
img_req.encoding = ‘utf-8‘
img_html = img_req.text
img_bf_1 = BeautifulSoup(img_html, ‘lxml‘)
img_url = img_bf_1.find_all(‘div‘, class_=‘wr-single-content-list‘)
img_bf_2 = BeautifulSoup(str(img_url), ‘lxml‘)
img_url = ‘http://www.shuaia.net‘ + img_bf_2.div.img.get(‘src‘)
if ‘images‘ not in os.listdir():
    os.makedirs(‘images‘)
urlretrieve(url = img_url,filename = ‘images/‘ + filename)
print(‘下载完成!‘)

我们将图片保存在程序文件所在目录的imgase目录下:

3.6 整体代码

已经获取到了每张图片的连接,我们就可以下载了。整合下代码,先少下载一点,下载前2页的图片。

# -*- coding:UTF-8 -*-
from bs4 import BeautifulSoup
from urllib.request import urlretrieve
import requests
import os
import time

if __name__ == ‘__main__‘:
    list_url = []
    for num in range(1,3):
        if num == 1:
            url = ‘http://www.shuaia.net/index.html‘
        else:
            url = ‘http://www.shuaia.net/index_%d.html‘ % num
        headers = {
                "User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
        }
        req = requests.get(url = url,headers = headers)
        req.encoding = ‘utf-8‘
        html = req.text
        bf = BeautifulSoup(html, ‘lxml‘)
        targets_url = bf.find_all(class_=‘item-img‘)

        for each in targets_url:
            list_url.append(each.img.get(‘alt‘) + ‘=‘ + each.get(‘href‘))

    print(‘连接采集完成‘)

    for each_img in list_url:
        img_info = each_img.split(‘=‘)
        target_url = img_info[1]
        filename = img_info[0] + ‘.jpg‘
        print(‘下载:‘ + filename)
        headers = {
            "User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
        }
        img_req = requests.get(url = target_url,headers = headers)
        img_req.encoding = ‘utf-8‘
        img_html = img_req.text
        img_bf_1 = BeautifulSoup(img_html, ‘lxml‘)
        img_url = img_bf_1.find_all(‘div‘, class_=‘wr-single-content-list‘)
        img_bf_2 = BeautifulSoup(str(img_url), ‘lxml‘)
        img_url = ‘http://www.shuaia.net‘ + img_bf_2.div.img.get(‘src‘)
        if ‘images‘ not in os.listdir():
            os.makedirs(‘images‘)
        urlretrieve(url = img_url,filename = ‘images/‘ + filename)
        time.sleep(1)

    print(‘下载完成!‘)

运行结果如下:

最终下载的图片:

4 总结

图片是不是很帅?还算满意吧?

这种爬取方法是比较简单的,速度慢。服务器又防爬虫程序,所以不能爬太快,每下载一个图片需要加个1秒延时,否则会被服务器断开连接。当然,解决办法还是有的,因为不是本文重点,以后有机会再细说。

爬取图片的原理就是这样了,如果想爬取妹子图的可以去《煎蛋网》看看,包你满意。

PS: 如果觉得本篇本章对您有所帮助,欢迎关注、评论、顶!

时间: 2024-10-24 05:03:24

Python3网络爬虫(十):这个帅哥、肌肉男横行的世界(爬取帅哥图)的相关文章

python网络爬虫(14)博客园用户信息爬取

说明 这里只放代码,方案技术没有更变 代码说明 需要cookies绕过登录,使用selenium在Firefox下模拟.需要安装geck...?插件,另外,数据存储在sqlite,需要安装. Spider.py import HtmlDownloader import HtmlParser import DataOutput import UrlManager import re from selenium import webdriver class Spider(object): def _

Python3网络爬虫(七):使用Beautiful Soup爬取小说

转载请注明作者和出处:http://blog.csdn.net/c406495762 运行平台: Windows Python版本: Python3.x IDE: Sublime text3 一.Beautiful Soup简介 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: Beautiful Soup提供一些简单的.python式的函数用来处理导航.搜索.修改分析树等功能.它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简

Python3网络爬虫(八):爱奇艺等主流视频网站的VIP视频破解(在线观看+视频下载)

转载请注明作者和出处:http://blog.csdn.net/c406495762 运行平台: Windows Python版本: Python3.x IDE: Sublime text3 一.前言 没有会员,想在线观看或下载爱奇艺.PPTV.优酷.网易公开课.腾讯视频.搜狐视频.乐视.土豆.A站.B站等主流视频网站的VIP视频?又不想充会员怎么办?博主本次写的VIP视频破解助手也许可以帮你解决烦恼. 二.软件使用说明 1.软件下载 软件运行平台:Windows 注意:该软件已经打包成exe可

python3网络爬虫学习——基本库的使用(1)

最近入手学习Python3的网络爬虫开发方向,入手的教材是崔庆才的<python3网络爬虫开发实战>,作为温故所学的内容同时也是分享自己操作时的一些经验与困惑,所以开了这个日记,也算是监督自己去学习.在这一系列的日记中我也会随时加上一些书中没有的内容作为对所学知识的一个补充. (1)使用urllib库 在python3中,把python2的urllib和urllib2两个库合并了,同时作为了其内置的HTTP请求库,不需要额外安装,这个库包括四个模块 request:最基本的HTTP请求模块,可

《Python3网络爬虫实战案例(崔庆才著)》 中文版PDF下载,附源代码+视频教程

<Python3网络爬虫实战案例(崔庆才著)>中文版PDF下载,附源代码+视频教程,带目录资料下载:https://pan.baidu.com/s/1OzxyHQMLOzWFMzjdQ8kEqQ 原文地址:http://blog.51cto.com/7369682/2330247

Java分布式爬虫Nutch教程——导入Nutch工程,执行完整爬取

Java分布式爬虫Nutch教程--导入Nutch工程,执行完整爬取 by briefcopy · Published 2016年4月25日 · Updated 2016年12月11日 在使用本教程之前,需要满足条件: 1)有一台Linux或Linux虚拟机 2)安装JDK(推荐1.7) 3)安装Apache Ant 下载Nutch源码: 推荐使用Nutch 1.9,官方下载地址:http://mirrors.hust.edu.cn/apache/nutch/1.9/apache-nutch-1

Python3网络爬虫(十一):爬虫黑科技之让你的爬虫程序更像人类用户的行为(代理IP池等)

原文链接: Jack-Cui,http://blog.csdn.net/c406495762 运行平台: Windows Python版本: Python3.x IDE: Sublime text3 1 前言 近期,有些朋友问我一些关于如何应对反爬虫的问题.由于好多朋友都在问,因此决定写一篇此类的博客.把我知道的一些方法,分享给大家.博主属于小菜级别,玩爬虫也完全是处于兴趣爱好,如有不足之处,还望指正. 在互联网上进行自动数据采集(抓取)这件事和互联网存在的时间差不多一样长.今天大众好像更倾向于

Python3网络爬虫(五):Python3安装Scrapy

一.Scrapy简介 Scrapy是一个为了爬取网站数据提取结构性数据而编写的应用框架,可以应用于数据挖掘,信息处理或存储历史数据等一些列的程序中.Scrapy最初就是为了网络爬取而设计的.现在,Scrapy已经推出了曾承诺过的Python3.x版本. 为什么学习Scrapy呢?它能我们更好的完成爬虫任务,自己写Python爬虫程序好比孤军奋战,而使用了Scrapy就好比手底下有了千军万马.Scrapy可以起到事半功倍(甚至好几倍*.*)的效果.所以,学习Scrapy也就显得很有必要了. 二.S

python3网络爬虫系统学习:第一讲 基本库urllib

在python3中爬虫常用基本库为urllib以及requests 本文主要描述urllib的相关内容 urllib包含四个模块:requests——模拟发送请求 error——异常处理模块 parse——关于URL处理方法的工具模块 robotparser——通过识别网站robot.txt判断网站的可爬取内容 一.发送请求 urllib库发送请求主要使用request模块中的两个内容:urlopen()方法以及Requests类,其中Requests类是结合urlopen()方法来使用的. 首