这里只是代码展示,且复制后不能直接运行,需要配置一些设置才行,具体请查看下方链接介绍:
Python爬取 | 唯美女生图片

from selenium import webdriver
from fake_useragent import UserAgent
from pyquery import PyQuery as pq
import winreg
from time import sleep
import time
import requests
import re
import osheader = {'User-Agent': UserAgent().random
}'''
获取单个id的HTML代码并解析,返回id的分类、名字、包含图片链接的list
'''def html_id(id_url):r = requests.get(id_url, headers=header)time.sleep(0.3)doc = pq(r.text)classical = doc('.d-md-inline-block').eq(0).children('a').text() # 获取id的分类if len(classical) != 0: # 判断id的分类是否获取成功,即判断该id的源码是否获取成功name = doc('.post-title').text() # id 名字lists = doc('.nc-light-gallery a').items() # id的图片所在标签links = ['https:' + i.attr('href') for i in lists if '.' in i.attr('href')] # 解析标签,获取图片链接if len(links) == 0: # 几年前的id,图片所在的标签与前面的不同,所以需要重新解析lists = doc('.nc-light-gallery img').items()links = ['https:' + i.attr('src') for i in lists if '.' in i.attr('src')]return [classical, name, links]else: # id 对应链接源码获取失败d = id_url.split('/')[-1].split('.')[0] # 获取为成功获取源码的idprint(f'{d} 获取失败,等待下一次循环')return 0'''
下载图片
'''def download(id, con, path, path3):num = 1  # 用于下载的图片计数classical = con[0] # id 分类name = con[1] # id 名字links = con[2] # id 所含图片链接print(f'{id} {classical} {name} 下载中...', end=' ')img_path = path + '\\' + classical # 创建对应分类的文件夹if not os.path.exists(img_path): # 判断文件夹是否创建os.mkdir(img_path)print(f'共{len(links)}张 ——> ', end='')for j in links: # 遍历列表,下载names = img_path + '\\' + name + str(num) + os.path.splitext(j)[1] # 文件名变量if 't.cdn.ink' not in j: # 判断图片链接是否规范,后面有些图片的链接是不规范的j = j[:6] + '//t.cdn.ink/' + j[6:]try:with open(names, 'wb') as f: # 下载f.write(requests.get(j, headers=header).content)print(f'{num} ', end='')except Exception as e:print(f'\n第{num}张下载错误,错误来自:{e} ')num = num + 1  # 计数# 将下载过的ID写入id_haven.txt 文件中with open(path3, 'a+', encoding='utf-8') as f:s = classical + ',' + name + ',' + id + '\n'f.write(s)print('下载完成!!!')'''
从TXT文件里获取ID,并返回列表
'''def txt_id(path):if 'haven' in path: # 从id_haven.txt TXT文件里获取已下载的IDid_haven = []if os.path.exists(path):with open(path, 'r', encoding="ISO-8859-1") as f:a = f.readlines()for i in a:id_haven.append(i.split(',')[-1].strip())return id_havenelse:with open(path, 'r') as f: # 从id_all.txt 和 id_not.txt TXT文件里获取已下载的IDid_all = f.readlines()id_all = [int(i.rstrip()) for i in id_all]id_all.sort(reverse=True) # 排序id_all = [str(i) for i in id_all]return id_all'''
保存html页面源代码,并获取html里的所有id
'''def get_id(html, path):# 保存HTML源代码path_html = path + r'\html源代码'  # 源代码保存路径if not os.path.exists(path_html): # 创建路径文件夹os.mkdir(path_html)with open(path_html + r'\vm_girls.html', 'w', encoding='utf-8') as f: # 写入vm_girls.html文件中f.write(html)# 开始解析源代码里的iddoc = pq(html)a_html = doc('.media-3x2 a') # 解析的id存在于每个a标签的href属性里,所有的属性值解析到一个列表里ids = []for i in a_html:url = pq(i).attr('href')id = re.search('\d+', url.split('/')[-1]).group() # 用正则表达式读取idids.append(int(id))ids.sort() # 将id从小到大排序ids = [str(i) for i in ids]with open(path + r'\ID_all.txt', 'w') as f:f.write('\n'.join(ids))with open(path + r'\ID_not.txt', 'w') as f:f.write('\n'.join(ids))'''
获取加载页面全部源代码
'''def get_html(url, chromedriver_path):wb = webdriver.Chrome(executable_path=chromedriver_path)wb.implicitly_wait(5)wb.get(url)start_time = time.time()# wb.find_element_by_class_name('nwmb-vdprs-close').click() #用于初次加载界面时弹出的广告框flag = True     # 如果等得不耐烦,任意按下键盘的一个按键,即可加载终止,开始后面的程序wb.execute_script('''document.body.addEventListener("keypress", function(){ document.getElementsByClassName('dposts-ajax-load')[0].innerText='加载终止'; });''')while flag:try:end = wb.find_element_by_class_name('dposts-ajax-load').textif end in ['没有更多内容', '加载终止']:print(end)flag = Falseelse:wb.find_element_by_class_name('dposts-ajax-load').click()except:sleep(1)finally:wb.execute_script("window.scrollTo(0, document.body.scrollHeight-1532)")  # 这里的1532,可能需要对于不同窗口的电脑,做适度调整html = wb.page_sourceprint(wb.title)wb.quit()end_time = time.time()times = end_time - start_timeprint(f'加载内容总耗时{times // 60:.0f}分{times % 60:.2f}秒!')return html'''
获取当前电脑桌面路径
'''def get_desktop():key = winreg.OpenKey(winreg.HKEY_CURRENT_USER,r'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders') # 利用系统的链表zm = winreg.QueryValueEx(key, "Desktop")[0] # 获取的是Unicode类型数据return str(zm) # Unicode转化为str并返回def main():url = 'https://www.vmgirls.com/'  # url链接path = get_desktop() + r'\vmGirls'if not os.path.exists(path): # 创建路径文件夹os.mkdir(path)chromedriver_path = get_desktop() + r'\chromedriver.exe'  # 浏览器驱动器路径judge = Trueif os.path.exists(path + r'\html源代码\vm_girls.html'):judge = input('html源代码已存在,是否需要重新加载:')if judge == '否':judge = Falseelse:judge = Trueif judge:html = get_html(url, chromedriver_path) # 自动获取html源代码get_id(html, path) # 保存源代码并解析源代码里的所有idpath1 = path + '\\ID_all.txt'  # 保存解析的所有idpath2 = path + '\\ID_not.txt'  # 保存未下载的所有idpath3 = path + '\\ID_haven.txt'  # 保存已下载的所有id# 全ID自动遍历下载id_not = txt_id(path2)id_haven = txt_id(path3)cycle = 0  # 计循环次数start_time = time.time()while len(id_not) > 5:cycle += 1id_all_1 = txt_id(path1)id_all_2 = txt_id(path1)for i in set(id_haven): # 在存在列表里检查ID是否已存在id_all_1.remove(i)for i in id_all_1: # 下载未下载的IDid_url = url + i + '.html'con = html_id(id_url)if con: # 判断此id的HTML界面是否获取成功download(i, con, path, path3)all_haven = txt_id(path3)remain = len(id_all_2) - len(all_haven)print(f'第{cycle}次循环,还剩下{remain}个ID未下载!')for i in set(all_haven): # 在存在列表里检查ID是否已存在id_all_2.remove(i)with open(path2, 'w') as f: # 未下载的ID存入id_not.txt文件f.write('\n'.join(id_all_2))time.sleep(2)else:print('结束')end_time = time.time()times = end_time - start_timeprint(f'下载总耗时{times // 60:.0f}分{times % 60:.2f}秒!')if __name__ == '__main__':main()

Python爬取 | 唯美女生图片相关推荐

  1. python使用 Scrapy 爬取唯美女生网站的图片资源

    python  python使用 Scrapy 爬取唯美女生网站 的资源,图片很好,爬取也有一定的难度,最终使用Scrapy获取了该网站 1.5W多张美眉照片....如有侵权,联系,立删除. ==== ...

  2. 爬取唯美女生网站上所有小姐姐的照片

    爬取唯美女生网站 前几天刚好看到有人在教学爬取唯美女生网站(https://www.vmgirls.com)的图片,大致听了一下,只是介绍了一次爬取某一个小姐姐的照片,因此就尝试做一个爬取全站小姐姐照 ...

  3. Ajax爬取唯美女孩图片

    requests爬取唯美女孩图片 一.前言 二.实现项目 1.分析网页 2.爬取网页 2-1.模拟POST请求 2-2.解析图集列表页面 2-2.解析图集页面 2-3.保存图片 2-4.执行爬虫 3. ...

  4. 使用requests 爬取唯美意境图片

    import requests import re import os url = 'http://image.baidu.com/search/index' date = {'cl': '2','c ...

  5. python爬虫之爬取“唯美“主流图片

    个人名片:

  6. 第一个爬虫项目-爬取唯美小姐姐网站

    爬取唯美小姐姐网站 链接: 源代码文件下载地址 展示 源代码 import requests import re import os import time# 伪装 用于可以伪装成浏览器. heade ...

  7. python爬取图片-Python爬取网页中的图片(搜狗图片)详解

    前言 最近几天,研究了一下一直很好奇的爬虫算法.这里写一下最近几天的点点心得.下面进入正文: 你可能需要的工作环境: Python 3.6官网下载 本地下载 我们这里以sogou作为爬取的对象. 首先 ...

  8. Python 爬取陈都灵百度图片

    Python 爬取陈都灵百度图片 标签(空格分隔): 随笔 今天意外发现了自己以前写的一篇爬虫脚本,爬取的是我的女神陈都灵,尝试运行了一下发现居然还能用.故把脚本贴出来分享一下. import req ...

  9. 用Python爬取彼岸图网图片

     用Python爬取彼岸图网图片 *使用了  四个模块 import time import requests from lxml import etree import os 没有的话自行百度安装. ...

最新文章

  1. C语言网络编程:TCP编程模型
  2. java代码(dex)注入
  3. HDLBits 系列(1)从HDLBits中获取灵感,整顿自己,稳步前行
  4. 免费试用人数太多,微软Windows 365云电脑服务器炸了,官方紧急暂停
  5. [深度学习]实现一个博弈型的AI,从五子棋开始(1)
  6. 对重复的记录使用SQL进行查询和删除等操作
  7. 氧气中国·创业创新大赛企业服务专场
  8. excel中match函数_Excel函数轻松学02:详解Excel函数中的数据类型
  9. 美国科学院公布新一批院士名单,中科院曹晓风及五名华裔教授当选
  10. 研究生学习阶段时间安排
  11. raspberry pi_用Raspberry Pi制作婴儿监视器
  12. Java中什么是JAP之hibernate-mvc修改功能-Springmvc
  13. Python学习,55道django面试题,来试试吧
  14. 基于射频技术的门禁管理系统
  15. 苹果手机软件升级密码_安卓系统用久了会卡,苹果系统就能一直流畅?
  16. docker 更改阿里云镜像
  17. 次坐标从0开始_三坐标测量机安全使用+量块校准操作规程
  18. 按图搜索淘宝商品-item_search_img (拍立淘)
  19. mac tableau 安装mysql驱动
  20. 分层和分段用什么符号_PPT中如何利用符号做出分层显示效果

热门文章

  1. 数据=新生产要素,数据安全之墙如何建?
  2. 堡垒之夜为什么显示服务器离线,堡垒之夜自己显示离线 | 手游网游页游攻略大全...
  3. 手机如何裁剪视频?分享三个裁剪方法给你
  4. mysql查询两张表的同一列_如何快速查找两个数据表之间的相同和不同?
  5. 计算机毕业设计 SpringBoot+Vue食商城系统 零食购物平台系统 网红零食店铺线上交易平台系统Java Vue MySQL数据库 远程调试 代码讲解
  6. Qt5官方demo解析集13——Qt Quick Particles Examples - Image Particles
  7. 墨者 - 安卓手机文件分析取证(微信发送的视频)
  8. 软件工程学习进度表(第六周)
  9. Excel VBA属性、方法、事件大全——Part9(Complete List of Excel VBA attribute/method and event)
  10. 笔记本电脑外接显示屏检测不到,黑屏问题。