【Python爬虫】花瓣网爬取美女图片
代码1
#/usr/bin/env python
#coding:utf-8import json
import urllib.request
import threading
#导入需要的JSON ,urllib及threading
#定义一个类
class myThread(threading.Thread):def __init__(self,imgurl,filename):threading.Thread.__init__(self)self.imgurl = imgurlself.filename = filenamedef run(self):print ('downloading: ' + self.imgurl)downfile(self.imgurl,self.filename)
#定义一个下载程序
def downfile(imgurl , filename):img_req = urllib.request.Request(imgurl)opener = urllib.request.build_opener()img_resp = opener.open(img_req)try:out = open(filename,'wb')out.write(img_resp.read())out.flush()out.close()except:print('error')if __name__ == "__main__":surl = 'http://huaban.com/pins/1821121555/?jlb0k0ki'#需要爬取的花瓣网美女图片地址hb = urllib.request.Request(surl)#按XHLHttprequest方式请求hb.add_header('X-Requested-With','XMLHttpRequest' )#模拟win10 chrome 浏览器hb.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0')html = urllib.request.urlopen(hb).read()obj = json.loads( html )#print (obj['pin']['board']['pins'])imgs = obj['pin']['board']['pins']#花瓣网图片需要的网址头preurl = 'http://img.hb.aicdn.com/'for img in imgs :imgurl = preurl + img['file']['key']#print (imgurl)myThread(imgurl,img['file']['key'] + '.jpg').start()
代码2
import urllib.request
import re
import os
import datetime
import easygui# 获取网页
def get_html(url):page = urllib.request.urlopen(url)html = page.read().decode('utf-8') #需要解码return html# 下载图片
def get_image(path,html):# 获取HTML源码里面的app.page["pins"]部分,主要图片ID位于此部分get_app_page_pins = re.compile(r'app\.page\["pins"\].*?;', re.S)get_str = re.findall(get_app_page_pins, html)[0]pin_id = r'"pin_id":(\d+)'pin_id_re = re.compile(pin_id)# 获取图片ID,保存在列表中id_list = re.findall(pin_id_re,get_str)x = 0for pinId in id_list:# 获取跳转网页网址url_str = r'http://huaban.com/pins/%s/' % pinId# 获取点击图片时弹出网页的源码pinId_source = get_html(url_str)# 解析源码,获取原图片的网址img_url_re = re.compile('main-image.*?src="(.*?)"', re.S)img_url_list = re.findall(img_url_re, pinId_source)try:img_url = 'http:' + img_url_list[0]urllib.request.urlretrieve(img_url, path + '\%s.jpg' % x)except:print("获取图片:%s失败,跳过,获取下一张。" % img_url)continueprint("获取成功!%s" % img_url)x += 1print("保存图片成功!")# 创建文件夹路径
def createPath():while True:print('选择你要保存的路径')path = easygui.diropenbox()filePath = path + "\\" + str(datetime.datetime.now().strftime('%Y-%m-%d %H.%M.%S'))isExists = os.path.exists(filePath)if not isExists:# 创建目录os.makedirs(filePath)print('%s创建成功!' % filePath)breakelse:print('%s已存在重新输入!' % filePath)return filePathif __name__ == '__main__':html = get_html("http://huaban.com/favorite/beauty/")get_image(createPath(), html) #调用创建文件夹方法并返回文件夹路径和传入网址
代码3
#-*- coding:utf-8 -*-
import requests
import re
import json
# 导入 requests re正则 json'''
login
登录花瓣 获取session
'''
def login():login_url = 'https://huaban.com/auth/'# 登录地址headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0","Accept": "application / json","Content-type": "application/x-www-form-urlencoded; charset=utf-8","Referer": "https://huaban.com/",}# 请求头信息session = requests.session()#sesson 会话login_data = {"email": "zengmumu%40126.com","password": "zmm123","_ref":"frame"}response = session.post(login_url, data=login_data, headers=headers,verify=False)# 登录页面getPic(session,5)# 获取图片,前5页'''
getPic
解析页面中的图片地址
session 会话信息
num 最大是页数
'''
def getPic(session,num):for i in range(1,num+1):response = session.get("https://huaban.com/search/?q=%E5%A5%B3%E7%A5%9E&category=photography&page="+str(i))# 获取页面信息("美女"文字编码后的结果是"%E5%A5%B3%E7%A5%9E" )data = re.search('app\.page\[\"pins\"\] =(.*);\napp.page\[\"page\"\]', response.text, re.M | re.I | re.S)# 提取到当前页面所在的所有图片信息data = json.loads(data.group(1))# 转换字符串为列表for item in data:url = "https://hbimg.huabanimg.com/" + item["file"]["key"]# 拼接图片地址index = item["file"]["type"].rfind("/")type = "."+item["file"]["type"][index + 1:]# 获取图片的类型file_name = item["raw_text"]# 获取图片的中文名download_img(url, file_name,type)# 下载图片'''
下载图片
url 图片的地址
name 图片的中文名
type 图片的类型
'''
def download_img(url,name,type):response = requests.get(url,verify=False)# 使用requests 下载图片index = url.rfind('/')file_name = name+url[index + 1:]+type# 获取图片的hash值print("下载图片:" + file_name)# 打印图片名称save_name = "./photo/" + file_name# 图片保存的地址(注意photo要自己建一个,与当前.py文件同一个文件夹)with open(save_name, "wb") as f:f.write(response.content)# 写入图片到本地
'''
定义主函数
'''
def main():login()# 如果到模块的名字是__main__ 执行main主函数
if __name__ == '__main__':main()
效果
【Python爬虫】花瓣网爬取美女图片相关推荐
- python爬虫实践之爬取美女图片
目录 概述 准备 所需模块 涉及知识点 运行效果 完成爬虫 1. 分析网页 2. 爬虫代码 概述 爬取妹子图网的美女图片. 准备 所需模块 time requests lxml 涉及知识点 pytho ...
- Python爬虫实战 | (9) 爬取搜狗图片
本篇博客我们将爬取百度图片,输入搜索词,爬取与搜索词相关的图片. 首先打开搜狗图片https://pic.sogou.com/,比如搜索"猫",此时的URL如下: https:// ...
- 【Python爬虫_8】爬取必应图片
"' 需求:爬取必应的图片,并下载,以老师为例: '" 1.首先通过XHR找到图片的url地址,打开该地址可看到 确认链接找到正确,然后多找几个来分析,可以得到通用的url: ur ...
- Python爬虫:批量爬取变形金刚图片,下载保存到本地。
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 本文文章来自:CSDN 作者:Guapifang 其实和爬取普通数据本质一样,不过 ...
- Python爬虫——片库网 爬取 视频
片库url:http://tv.cnco.me/ 一.进入网站 二.输入关键字跳转界面 格式: url = "http://tv.cnco.me/" search_keyword ...
- python爬虫六:爬取电影图片及简介
# -*- coding: utf-8 -*-#2345电影排行榜 import requests from bs4 import BeautifulSoup#获取网站的通用类 def get_htm ...
- [day4]python网络爬虫实战:爬取美女写真图片(Scrapy版)
l> 我的新书<Android App开发入门与实战>已于2020年8月由人民邮电出版社出版,欢迎购买.点击进入详情 文章目录 1.开发环境 2.第三方库 3.Scrapy简介 4. ...
- [day1]python网络爬虫实战:爬取美女写真图片
l> 我的新书<Android App开发入门与实战>已于2020年8月由人民邮电出版社出版,欢迎购买.点击进入详情 文章目录 1.开发环境 2.第三方库 3.实现 1.分析url格 ...
- [day2]python网络爬虫实战:爬取美女写真图片(增强版)
l> 我的新书<Android App开发入门与实战>已于2020年8月由人民邮电出版社出版,欢迎购买.点击进入详情 文章目录 1.开发环境 2.第三方库 3.实现 1.分析url格 ...
- Python【爬虫实战】爬取美女壁纸资源
Python[爬虫实战]爬取美女壁纸资源 一:首先选取一个网站,这里我们选择了一个壁纸网站 二:进入网站,我们可以看到很多图片放在一页里 三:按下F12开发者工具,点击Elments查看网页的代码 四 ...
最新文章
- 从零开始学python微课视频版-从零开始学Python(微课视频版)
- 如何解决多线程并发访问一个资源的安全性问题?
- 直接插入排序及优化(二分查找插入排序)
- php资源文件html,nginx 同一域名下分目录配置显示php,html,资源文件
- python读取sas数据集_利用Python获取SAS和R自带数据集
- gnuplot在windows下的安装和使用
- matlab边的介数,matlab-bgl-master 复杂网络工具包,便于计算 边介数,最短路径等问题 261万源代码下载- www.pudn.com...
- 派对屋效果器调试_派对屋DAK-780使用说明书
- 51单片机基本刷屏测试实验_320x240真彩TFT屏51单片机驱动刷屏程序
- 华为云计算认证考试大纲是什么?华为云计算认证含金量高吗?
- 儿童手表语音物联卡贵吗?如何办理?
- 关于雅虎邮箱的Foxmail,outlook设置。
- 高等数学:第八章 多元函数的微分法及其应用(6)微分法在几何上的应用
- 2022年第一季度保险服务数字化跟踪分析
- 电路板上的插头怎么拔下来_怎么从电路板上拆卸多针脚电子元器件
- java基础篇---第一天
- Android阿拉伯适配rtl
- 自控力读书笔记:第二章 意志力的本能:人生来就能地址奶酪蛋糕的诱惑
- Android11以上版本使用高德定位,定位成功,卫星数一直为0
- Vue+Vuex+Axios+ECharts 画一个动态更新的中国地图
热门文章
- 新萝卜家园Ghost XP SP3电脑城装机版2013.08
- 实例3、研究 ICMP 数据包
- 锐捷服务器端口映射教程,锐捷路由器端口映射,路由器端口映射
- 基于 Markdown 的中文文档排版规范
- BootStrap日历插件
- 微信小程序教程、开发资源下载汇总(2.8日更新,持续更新中……)
- 鼠标停留在按钮上显示文字
- iPhone5捣鼓mobile terminal
- 金蝶K3 Wise—BOM批量多级展开
- JavaWeb在线商城系统(java+jsp+servlet+MySQL+jdbc+css+js+jQuery)