2019-05-30 16:46:37 lixiaosenlin 阅读数 271
  • 美女讲师教你学Python:开发环境的部署

    您观看课程学习后 免费入群领取【超全Python资料包+17本学习电子书】 Python语法清楚,干净,易读、易维护,是目前流行的编程语言; Python作为一种通用的编程语言,可以应用于各种平台和操作系统; 那么,Python如何使用呢?

    2869 人正在学习 去看看 秦红华

今天给大家分享一篇利用python爬取美女图片的文章

环境准备

开发环境:Windows 7

开发工具:Pycharm

python版本:python3.7

第三方库:requests,Beautifulsoup

网站源码分析

首先在chrome浏览器中打开帅啊网里面的美女类别下的网址:http://www.shuaia.net/meinv/,打开后会看到各种类型的美女,随便选择一个类别点进去后是一个包含了多张美女图片的详情页面,那么我们最终要爬取的就是美女详情下面的所有的美女图片。

那么当我们随便点击一个美女类别时,会跳转到另外一个详情页面,做过web开发的朋友应该都知道,这种一般都是通过超链接来实现的,在html代码里对应的也就是a标签。接下来我们就需要找到这些a标签,然后模拟浏览器请求这些链接并获取链接详情页面中的美女图片。

再回到网站的美女列表页,随便选择一个类别然后右键单击检查,这时浏览器会打开一个html源码的窗口,并且自动定位到你所选类别的html代码,通过分析我们会发现每个类别都会由一个a标签包裹,并且每个标签都有个共同的属性,就是每个标签都有一个的class类且值都为“item-img”,这样我们就可以通过定位到class=“item-img”的a标签来找到所有类别的链接地址了。

同理,我们进入到美女的详情页面,通过同样的方式会发现每张图片都有由一个img标签组成,只要我们找到所有的img标签即可,但是后面真正操作起来会发现如果只是通过img标签来过滤的话,一些我们不需要的图片也会被爬取下来,这时我们就需要去分析我们要下载的图片有哪些共同的特性,然后用这些共同的特性再进行过滤,把不需要的图片过滤掉。如果从img本身找不到不同的地方,那么可以尝试着从img标签的上一层或再上一层标签进行分析,直到能够找到不同为止。

关键代码及思路解析

  1. 首先我们通过第三方requests库去请求美女列表的地址:http://www.shuaia.net/meinv/,然后将请求回来的源码发送给BeautifulSoup,通过buautifulsoup的findall方法找到所有的class=“item-img”的a标签并保存的一个变量中
    req = requests.get("http://www.shuaia.net/meinv/")
    bs = BeautifulSoup(req.text,'lxml')
    target_urls = bs.find_all('a',class_'item-img') 
    

     

  2.  循环遍历并请求爬下来的url地址,这时也就是跳转到详情页的那步。通过分析会发现每张图片都是一个img标签,那么刚刚上面说过如果只通过img标签去过滤的话可能或抓取出一些我们并不想要的图片,所以这里取得是img标签的父父级p标签,因为它们都有一个共同的属性:class=“ql-align-center”,而其它不需要的图片没有这个属性,这样我们就可以只过滤出我们想要的图片了。

    for url in target_a:
        req1 = requests.get(url.get('href'))
        bs1 = BeautifulSoup(req1.text,'lxml')
        img_urls = bs1.find_all('p',class_='ql-align-center')
  3. 继续遍历每个图片地址,下载图片并保存到本地文件夹中。

    for img_url in img_urls:
        resp = requests.get(img_url.a.img.get('src'))
        name = random.randint(1,100000)
        with open('images/meinv_%s' % str(name),'wb') as f:
            f.write(resp.content)

     

 完整代码

import requests
import os
import random
from bs4 import BeautifulSoup

def get_shuaia_meinv():
    
    #创建images文件夹
    if 'images' not in os.listdir():
        os.mkdir('images')

    #请求头设置,绕过网站的反爬机制
    user_agent = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36'
    headers={'User_Agent': user_agent }
    
    #爬取1-3页的所有美女
    for index in range(1,4):
        if index == 1:
            mn_url = "http://www.shuaia.net/meinv/"
        else:
            mn_url = "http://www.shuaia.net/meinv/index_%d" % index
        
        # STEP 1 获取列表页面中的所有连接
        req = requests.get(url = mn_url,headers = headers)
        req.encoding = 'utf-8'#设置编码格式
        bs = BeautifulSoup(req.text,'lxml')
        target_urls = bs.find_all('div',class_='item-img')
        
        # STEP 2 获取详情页面中所有图片的地址
        for img_url in target_urls:
            req1 = requests.get(url = img_url.get('href'),headers = headers)
            bs1 = BeautifulSoup(req1.text,'lxml')
            img_urls = bs1.find_all('p',class_='ql-align-center')

            # STEP 3 保存图片到本地
            for url in img_urls:
                try:
                    resp = requests.get(url.a.img.get('src'),headers = headers)
                    name = random.randint(1,100000)#生成一个1到100000的随机数
                    with open('images/meinv_%s' % str(name),'wb') as f:
                        f.write(resp.content)
                        print("正在下载美女:%s" % url.a.img.get('src'))
                except Exception as e:
                    print("下载出错了。。。。")

if __name__ == '__main__':
    get_shuaia_meinv()

到此就可以下载你想要的美女图片了。

如果有任何疑问或任何错误,欢迎评论留言。

2008-04-02 09:56:00 phphot 阅读数 1108
  • 美女讲师教你学Python:开发环境的部署

    您观看课程学习后 免费入群领取【超全Python资料包+17本学习电子书】 Python语法清楚,干净,易读、易维护,是目前流行的编程语言; Python作为一种通用的编程语言,可以应用于各种平台和操作系统; 那么,Python如何使用呢?

    2869 人正在学习 去看看 秦红华
2010-09-29 18:17:00 jinbing520025 阅读数 354
  • 美女讲师教你学Python:开发环境的部署

    您观看课程学习后 免费入群领取【超全Python资料包+17本学习电子书】 Python语法清楚,干净,易读、易维护,是目前流行的编程语言; Python作为一种通用的编程语言,可以应用于各种平台和操作系统; 那么,Python如何使用呢?

    2869 人正在学习 去看看 秦红华

美女美女

美女美女

美女美女

美女美女

美女美女

美女美女

美女美女

美女美女

美女美女

美女美女

美女美女

美女美女

美女美女

美女美女

美女美女

美女美女

美女美女

美女美女

美女美女

美女美女

美女美女

美女美女

美女美女

美女美女

2019-08-06 18:45:44 Biting_W 阅读数 449
  • 美女讲师教你学Python:开发环境的部署

    您观看课程学习后 免费入群领取【超全Python资料包+17本学习电子书】 Python语法清楚,干净,易读、易维护,是目前流行的编程语言; Python作为一种通用的编程语言,可以应用于各种平台和操作系统; 那么,Python如何使用呢?

    2869 人正在学习 去看看 秦红华

#(一)美女选妃

“美女选妃”其实就是一个对数据进行总体评判是否合格的程序。
首先,利用List接口,把数据导入进去。
其次,利用Map接口,将数据进行总和,求平均值。
最后,利用boolean函数,规定合格值,进行对数据的评判。

(二)权限修饰符

一、public:接口访问权限

使用public关键字,就意味着被声明的成员或方法对所有人都是可以访问的

二、private:无法访问

使用private关键字,就意味着被声明的成员或方法,除了本类,其他任何类都无法访问。

三、protected:继承访问权限

新类通过继承可以复用一个现有类(父类或基类),然后扩展基类的成员、方法。

1.public:当前类,相同包下不相同的类,不同包下的类。
2.defaul:当前类,相同包下不相同的类。
3.private:当前类。
4.protected:当前类,相同包下不相同的类,不同包下的子类(继承关系)。

在这里插入图片描述

(三)List(有序、可重复)接口

List里存放的对象是有序的,同时也是可以重复的,List关注的是索引,拥有一系列和索引相关的方法,查询速度快。

ArrayList是基于数组的,在初始化 ArrayList 时,会构造空数组。

(四)Map(键值对、键唯一、值不唯一)

Map集合中存储的是键值对,键不能重复,值可以重复。

方法:
1、添加
  V put(K key, V value) (可以相同的key值,但是添加的value值会覆盖前面的,返回值是前一个,如果没有就返回null)
2、删除
  remove() 删除关联对象,指定key对象
  clear() 清空集合对象
3、获取
  value get(key) 可以用于判断键是否存在的情况。当指定的键不存在的时候,返回的是null。
4、判断
  boolean isEmpty() 长度为 0 返回 true 否则 false
  boolean containsKey(Object key) 判断集合中是否包含指定的 key
  boolean containsValue(Object value) 判断集合中是否包含指定的 val
5、长度:
 Int size()

(五)课后小作业

/* A水池有154吨水,B水池有82吨水,两水池每小时都排出2吨水,
多少个小时后,A水池的吨数是B水池的4倍。使用编程来解题
*/
public class Test03 {

public static void main(String[] args){
    int a = 154;
    int b = 82;
    int i = 0;
    while (a != b*4){
        a = a - 2;
        b = b - 2;
        i++;
    }
    System.out.println(i);
}

}

2004-06-28 14:09:00 gemming 阅读数 482
  • 美女讲师教你学Python:开发环境的部署

    您观看课程学习后 免费入群领取【超全Python资料包+17本学习电子书】 Python语法清楚,干净,易读、易维护,是目前流行的编程语言; Python作为一种通用的编程语言,可以应用于各种平台和操作系统; 那么,Python如何使用呢?

    2869 人正在学习 去看看 秦红华

终于找到了他们的网址了:http://angel.mingox.com/index/index.asp

本帅哥只交美女做朋友

博文 来自: ai2236

做个第三眼美女

阅读数 65

没有更多推荐了,返回首页