Python爬取美女图片 爬虫基础
Python爬取美女图片 爬虫基础
- 简述
- 实现思路
- 关键代码
- 文件下载
- 爬虫代码
- 成果
- 更新
简述
作为一个考研狗,每天除了日复一日的复习外,偶尔也想给自己寻找一些生活的小乐趣,今天突然想到了自己曾经稍微接触的爬虫,想看看可以爬取些图片放到电脑上,就花了些时间改了改之前的爬虫代码,爬取了一部分照片先量一下战绩吧。照片不多但也算是自己的一次爬虫小经验。
实现思路
爬虫的网页很简单,照片真实路径都在页面中直接可以拿到
主要流程就是先进入照片浏览的主页,每个照片的主页都会链接几个照片页面,像下面这样,每个图片都会链接一个网页
图片链接的网页如下图所示
但是这个页面显示的图片还是不够高清,这个网站有一个规律,更高清的照片存放的网页就在现在这个页面的路径后跟一个 -1920x1080 的htm中,进入这个htm之后展示的照片才是我们要的,拿到图片的url就直接下载就好,就这样一直循环,所有的照片就都下载下来了。
关键代码
文件下载
import requests
import timedef 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 = 0count_tmp = 0time1 = 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 * 100speed = (count - count_tmp) / 1024 / 1024 / 2count_tmp = countprint(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 : PyCharmimport 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, valuelistfor 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
Python爬取美女图片 爬虫基础相关推荐
- python爬取美女图片的练习
python 爬取美女图片的练习 主要使用 xpath 定位获取 图片的链接 本次练习使用到os库 ,lmxl库 , requests库 import requests from lxml impor ...
- 【爬虫实战】手把手教你使用python爬取美女图片
本文目录 写作缘起 上代码 思路分析 效果展示 写在最后 写作缘起 用python爬虫实现的图片资源下载器,一页页下载图片过于缓慢,当我们要欣赏一些好看的图片时一页页翻太复杂了,干脆写一个图片下载器 ...
- Python爬取网站图片(爬虫入门demo)
代码功能: 爬取网站的教师图片,在用户主机上创建好PNG文件夹保存共110张图片,同时把每张图片的老师介绍内容写入H3.txt文件中. 实现思路: 打开该网页后用F12查看网页的html原代码,发现图 ...
- 宅男福利 用Python爬取美女图片
嘿嘿 召唤老色批 今天带大家爬去一下美女的图片 用的是requests和xpath去解析 获取网页和解析网页的函数 def get_tag(response,tag):html=etree.HTML( ...
- 用python爬取美女图片
import urllib.request import os for i in range(2000, 2400): if not os.path.exists('tupian/' + str(i) ...
- Scrapy爬取美女图片续集 (原创)
上一篇咱们讲解了Scrapy的工作机制和如何使用Scrapy爬取美女图片,而今天接着讲解Scrapy爬取美女图片,不过采取了不同的方式和代码实现,对Scrapy的功能进行更深入的运用. 在学习Scra ...
- Scrapy爬取美女图片续集
上一篇咱们讲解了Scrapy的工作机制和如何使用Scrapy爬取美女图片,而今天接着讲解Scrapy爬取美女图片,不过采取了不同的方式和代码实现,对Scrapy的功能进行更深入的运用. 在学习Scra ...
- 使用Python爬取网页图片
使用Python爬取网页图片 李晓文 21 天前 近一段时间在学习如何使用Python进行网络爬虫,越来越觉得Python在处理爬虫问题是非常便捷的,那么接下来我就陆陆续续的将自己学习的爬虫知识分享给 ...
- 利用python爬取网页图片
学习python爬取网页图片的时候,可以通过这个工具去批量下载你想要的图片 开始正题: 我从尤物网去爬取我喜欢的女神的写真照,我们这里主要用到的就两个模块 re和urllib模块,有的时候可能会用到t ...
- Python爬取bing图片
我之前写过一篇Python爬取百度图片,有兴趣的朋友可以去读一下,这次写的是爬取Bing的图片. 打开Bing图片,搜索关键词,开始分析页面,可以发现bing和百度一样都是下滑自动加载,百度默认一次加 ...
最新文章
- Webhooks上的一个简单方法:恐吓现在停止
- MPB:深大李猛组-基于PacBio SMRT三代测序的红树林沉积物真菌群落的研究
- 大规模分布式消息中间件考虑点
- 《php入门很简单,PHP入门速成(1)
- P4768 [NOI2018] 归程 Kruskal重构树 + 倍增 + 最短路
- android studio创建构造方法,使用Android studio创建你的第一个项目
- pycharm定时运行python脚本_Python脚本用于定时关闭网易云音乐PC客户端
- win10 安装oracle11g R2的64位版本
- java项目总结范文_java项目收获总结(20200505185659)
- Sketch 67.2 简体中文版 最佳Mac产品原型设计工具
- 【信号与系统】z变换
- 面试简历上的项目经验
- 知其然,知其所以然!
- 2020年内蒙古自治区第十五届大学生程序设计竞赛榜单
- 9.2 iptables主机防火墙
- 怎么打开.pos文件
- 黑科技智能家电新生儿“智能冰箱”
- Unity实现可调子屏幕(类小地图)效果
- 单例模式及单例类的两种实现
- 数学物理方法·基础⑦基本初等复变函数的计算公式/方法