Python爬取美女图片 爬虫基础

Python爬取美女图片 爬虫基础Python爬取美女图片爬虫基础简述实现思路关键代码文件下载爬虫代码成果简述作为一个考研狗,每天除了日复一日的复习外,偶尔也想给自己寻找一些生活的小乐趣,今天突然想到了自己曾经稍微接触的爬虫,想看看可以爬取些图片放到电脑上,就花了些时间改了改之前的爬虫代码,爬取了一部分照片先量一下战绩吧。照片不多但也算是自己的一次爬虫小经验。实现思路爬虫的网页很简单,照片真实路径都在页面中直接可以拿到主要流程就是先进入照片浏览的主页,每个照片的主页都会链接几个照片页面,像下面这样,每个图片都会链接一个网页

大家好,又见面了,我是你们的朋友全栈君。

简述

作为一个考研狗,每天除了日复一日的复习外,偶尔也想给自己寻找一些生活的小乐趣,今天突然想到了自己曾经稍微接触的爬虫,想看看可以爬取些图片放到电脑上,就花了些时间改了改之前的爬虫代码,爬取了一部分照片先量一下战绩吧。照片不多但也算是自己的一次爬虫小经验。
在这里插入图片描述在这里插入图片描述

实现思路

爬虫的网页很简单,照片真实路径都在页面中直接可以拿到
主要流程就是先进入照片浏览的主页,每个照片的主页都会链接几个照片页面,像下面这样,每个图片都会链接一个网页
在这里插入图片描述图片链接的网页如下图所示
在这里插入图片描述
但是这个页面显示的图片还是不够高清,这个网站有一个规律,更高清的照片存放的网页就在现在这个页面的路径后跟一个 -1920×1080 的htm中,进入这个htm之后展示的照片才是我们要的,拿到图片的url就直接下载就好,就这样一直循环,所有的照片就都下载下来了。

关键代码

文件下载

import requests
import time


def downloadFile(name, url):
    try:
        headers = { 
   'Proxy-Connection': 'keep-alive'}
        r = requests.get(url, stream=True, headers=headers)
        print("=========================")
        print(r)
        length = float(r.headers['Content-length'])
        f = open(name, 'wb')
        count = 0
        count_tmp = 0
        time1 = time.time()
        for chunk in r.iter_content(chunk_size=512):
            if chunk:
                f.write(chunk)  # 写入文件
                count += len(chunk)  # 累加长度
                # 计算时间 两秒打印一次
                if time.time() - time1 > 2:
                    p = count / length * 100
                    speed = (count - count_tmp) / 1024 / 1024 / 2
                    count_tmp = count
                    print(name + ': ' + formatFloat(p) + '%' + ' Speed: ' + formatFloat(speed) + 'M/S')
                    time1 = time.time()
        f.close()
        return 1;
    except:
        print("出现异常")
        return 0;


def formatFloat(num):
    return '{:.2f}'.format(num)


if __name__ == '__main__':
    downloadFile('D://file//photo//hd.jpg',
                 'https://browser9.qhimg.com/bdr/__85/t01753453b660de14e9.jpg')

文件下载没什么好说的,复制就可以用,这里做了一个异常捕获的处理,因为可能出现连接不上资源,或则目标服务器强制关闭连接的可能,做这个异常处理就是为了判断有没有异常出现,从而进行相应的处理

爬虫代码

# -*- codeing = utf-8 -*-
# @Time : 2021/6/19 23:01
# @Author : xiaow
# @File : PhotoSpider.py
# @Software : PyCharm
from bs4 import BeautifulSoup  # 网页解析
import xlwt  # excel操作
import sqlite3  # 数据库操作
from api import spider2 as spider
import time
from api import FileDownload as fd
import re  # 正则表达式

imglink = re.compile(r'<a href="(.*?)" target="_blank" title=".*?"><img alt=".*?" src=".*?"/><b>.*?</b></a>', re.S)
img2link = re.compile(r'<a href="(.*?)" target="_blank">.*?<span>(1680x1050)</span></a>', re.S)
img3link = re.compile(r'<img alt=".*?" src="(.*?)" title=".*?"/>', re.S)

# 获取照片页面路径
def getPhoto(url):
    srcs = []
    html = spider.askURL(url);
    bs = BeautifulSoup(html, "html.parser");
    for item in bs.find_all('a', target="_blank"):
        item = str(item)
        src = re.findall(imglink, item)
        if (len(src) != 0):
            srcs.append("http://www.netbian.com" + src[0])
    return srcs;

# 照片主页显示的照片不够清楚,这里根据这个网站存储照片的规律,拼接了一个地址,这个地址的照片比较高清一些
def getPhotoUrl(url):
    purls = [];
    url3 = "http://www";
    url2 = url.split(".")
    for j in range(1, len(url2)):
        if j == len(url2) - 2:
            url3 = url3 + "." + url2[j] + "-1920x1080"
        else:
            url3 = url3 + "." + url2[j]
    return (url3)
# 下载照片
def downloadPhoto(url):
    html = spider.askURL(url);
    bs = BeautifulSoup(html, "html.parser");
    for item in bs.find_all("img"):
        item=str(item)
        itemsrc=re.findall(img3link,item)
        if(len(itemsrc)!=0):
           return itemsrc[0]


if __name__ == '__main__':
    src = "http://www.netbian.com/mei/index_";
    # 拼接照片主页的路径
    for i in range(2,163):
        time.sleep(5)
        src2 = "";
        src2=src+str(i)+".htm"
        urls=getPhoto(src2)

        for j in range(len(urls)):
            time.sleep(3)
            fd.downloadFile('D://file//photo//hd'+str(time.time())+".jpg",downloadPhoto(getPhotoUrl(urls[j])))

成果

展示几张照片吧
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

更新

解析网页的封装类

#-*- codeing = utf-8 -*-
#@Time : 2021/3/1 16:16
#@Author : xiaow
#@File : spider2.py
#@Software : PyCharm

import re  # 正则表达式
import sys
import urllib.request, urllib.error  # 指定url,获取网页数据
from bs4 import BeautifulSoup  # 网页解析
import xlwt  # excel操作
import sqlite3  # 数据库操作

baseurl = 'https://movie.douban.com/top250?start='

imglink = re.compile(r'<a href=".*?" title=".*?">', re.S)

# titlelink = re.compile(r'<span class="title">(.*)</span>')
# findlink = re.compile(r'<a href="(.*?)">') # 创建正则表达式 表示规则


# 1.爬取网页
def getData(url):
    urllist = []
    valuelist = []
    # 2.解析数据
    img = []
    src = []
    title = []
    for i in range(0, 10):
        url = baseurl + str(i * 25)
        html = askURL(url)
        bs = BeautifulSoup(html, "html.parser")
        print(bs)
        # urllist.append(bs.a.attrs["href"])
        # valuelist.append(bs.a.string)
        # return urllist, valuelist
        for item in bs.find_all('div', class_="item"):  # 查找div 并且该div应满足class=item
            # print(item)
            item = str(item)
            # titlel = re.findall(titlelink, item)
            # title.append(titlel)
            # srcl = re.findall(findlink, item) # 正则表达式进行筛选
            # for s in srcl:
            # src.append(s)
            imgl = re.findall(imglink, item)  # 正则表达式进行筛选
            for i in imgl:
                img.append(i)
    return title, img, src;


# 得到一个url的网页内容1
def askURL(url):
    head = { 
   
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36",
        "Cookie": '_ga=GA1.2.1191993538.1623990557; _gid=GA1.2.176559558.1623990557; HstCfa3699098=1623990557028; HstCmu3699098=1623990557028; HstCnv3699098=1; HstCns3699098=1; newurl=0; __dtsu=10401623990557D693AE61F09F524965; pbnfgecookieinforecord=%2C64-32128%2C64-32129%2C; HstCla3699098=1623991353818; HstPn3699098=7; HstPt3699098=7'
    }
    req = urllib.request.Request(url=url, headers=head)
    html = ""
    try:
        response = urllib.request.urlopen(req)
        html = response.read()
    except Exception as result:
        print(result)
    return html


# 3.保存数据
def savaData(savepath):
    pass

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/148823.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • C语言学习——位运算

    C语言学习——位运算原码反码补码介绍原码 就是前面所介绍的二进制定点表示法,即最高位为符号位,“ 0 ”表示正,“ 1 ”表示负,其余位表示数值的大小。反码 表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。补码 表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加 1 。补码详细介绍补码是为了表示一个负数的二进制形式。其转化方式是,先将负数当成正数,转化成二进制…

  • python 贪吃蛇小游戏代码

    python 贪吃蛇小游戏代码#!/usr/bin/python#-*-coding:UTF-8-*-#作者:黄哥#链接:https://www.zhihu.com/question/55873159/answer/146647646#来源:知乎#著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。importrandomimportpygameimportsysfromp

  • Jetson TX1 安装 ROS[通俗易懂]

    Jetson TX1 安装 ROS[通俗易懂]JetsonTX1安装ROS注意目前ROS只能支持32位的TX1,后面购买的TX1一般都预装64位Ubuntu。因此如果需要安装ROS需要重新刷TX1系统,否则只能等什么时候ROS官方更新了。目前请不用尝试在64位系统安装ROS,经过1周的折腾,尚未找到可行的方案。一、重新刷TX1系统1.在主机上设置由于TX1只提供了一个USB3.0接口,使用USB3.0HUB进行拓展USB。插好键盘鼠

  • io流怎么用_io流java

    io流怎么用_io流java相信大家都能体会到,io流用到的地方很多,就比如上传下载,传输,设计模式等….基础打扎实了,才能玩更高端的。在博主认为真正懂IO流的优秀程序员每次在使用IO流之前都会明确分析如下四点:>(1)明确要操作的数据是数据源还是数据目的(也就是要读还是要写)(2)明确要操作的设备上的数据是字节还是文本(3)明确数据所在的具体设备(4)明确是否需要额外功能(比如是否需要转换流、高效流等)

    2022年10月20日
  • Conference Management Toolkit_wolverine access

    Conference Management Toolkit_wolverine accessManagementObject:RetrievingtheManagementInformationThemostfundamentaltypethattheSystem.ManagementnamespaceexposesiscalledManagementObject.Thistyperepresentsa.NETviewofanarbit

  • 利用CSkin组件设计漂亮的WinForm登录界面「建议收藏」

    利用CSkin组件设计漂亮的WinForm登录界面「建议收藏」众所周知,WinForm具有快速开发的优点,但是美观方面一直被人诟病,一般美化都是采用第三方的组件来满足美化效果,这里我也利用Cskin组件来设计一个具有一定美感的登录界面,CSkin下载CSkin的使用你可以自行查看下载后的文档或者另行百度,这里就不介绍了,关于CSkin的美化登录界面简单介绍,主要是利用背景图片结合CSkin界面和控件的效果来实现的,如果你中别人的登录界面,你也可以截取别人的登录界面,然后用自己的控件覆盖人家的登录输入位置,覆盖别人的logo或者系统名称等,这也是一种技巧。

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号