python 爬LOFTER 稍微升级,能够爬下一个人的所有上传的图片。

2023-10-31 00:30

本文主要是介绍python 爬LOFTER 稍微升级,能够爬下一个人的所有上传的图片。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

环境:见上一篇博客
这次以http://beautyimg001.lofter.com/该用户的图片为例,如有侵权,请及时联系我。
上次我们能够爬下单独网页上面的图片,以这个为基础,我们准备爬取他主页里的所有图片。(有点不厚道~~~~)
工具,这次用了selenium包里的webdriver。具体介绍大家可以去找一下,主要功能能模拟我们点击网页上的按钮。话不多说上码

import requests
from bs4 import BeautifulSoup
from selenium import webdriver
import os
import random
import re
import timechromepath = os.path.abspath("/Users/xxxx/Downloads/chromedriver")#使用selenium时注意要下载浏览器驱动,把他的路径写对。headers = {'User-Agent': 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)',# 'Referer': 'http://www.lofter.com'}def get_img_url(url):response = requests.get(url,headers=headers)soup = BeautifulSoup(response.text,'html.parser')title = soup.title.stringimg_list = soup.select('img')print(img_list)src = [i.get('src') for i in img_list]return src,titledef get_img(src,title):index = 0for i in src:current_time = time.time()random_tag = random.randint(0,200)finnal_tag = str(current_time)[6:-7]+ str(random_tag)#主要是防止每次调用get_img()时,会把同一个title的照片给重写了,每个图片名字打个独一无二的名字res = requests.get(i,headers= headers)f = open("/Users/xxxx/Desktop/craw/images/" + title + finnal_tag + "%d.jpg"  % index,'wb')#注意这里路径要写对f.write(res.content)f.close()index += 1return 0def get_type2_user_all_url_list(base_url,page):#这里是最关键的,叫type2是因为LOFTER上面,每个人的主页格式不同,这个适合上文提到的那个人的主页类型all_page_url_list = []all_page_url_list.append(base_url)#先把第一页的网址给listbrowser = webdriver.Chrome(chromepath)browser.get(base_url)#模拟打开该人的主页browser.find_element_by_xpath('/html/body/div[3]/div[11]/div[2]/a').click()#让浏览器点击下一页browser.find_element_by_xpath('/html/body/div[5]/div/div[3]/a').click()#这里是最关键也是耗费我很长时间才用明白的地方。这个在下文中专门作解释,这个操作的功能是,由于我们没有登录账号,第二页会弹出一个框,让你登录,不过你不把这个框叉掉,这就后面对浏览器就无法操作。all_page_url_list.append(browser.current_url)time.sleep(2)#这个主要是根据网速而定,因为如果第二页没有加载完全,你后面点击下一页那块没加载出来,程序会报错,说找不到点击下一页那个elementwhile page-2>0:browser.find_element_by_xpath('/html/body/div[3]/div[11]/div[2]/a').click()time.sleep(0.5)all_page_url_list.append(browser.current_url)page -= 1return all_page_url_list#这样就获取了你想要的page内的所有page的urlpage = input("Please enter how many page you want to craw:")
base_url = "http://beautyimg001.lofter.com/"
url_list = get_type2_user_all_url_list(base_url,int(page))
for url in url_list:src,title = get_img_url(url)get_img(src,title)
    讲一下具体怎么找到那个点击下一页的操作(浏览器源码大概知道一些,但是不熟),所以如果你觉得我的方法很low,那请移步至比较吊的人那。我用的Chrome,给大家讲一下Chrome的步骤,点击chrome窗口右上角的数着的省略号(学名:自定义及控制),然后选择"更多工具",在选择“开发者工具”,如下图所示:

在这里插入图片描述
` 然后就会弹出如下图所示:
在这里插入图片描述
在html里查找page,你就会发现class=“next active”,这个右键点击在那一行,然后copy,copy时有选项,选择xpath,然后用find_element_by_xpath(‘你复制的xpath’).click()。运用类似思路可以解决因为我们没有登录LOFTER导致在刷第二页时,弹出登录对话框。在源码里找‘close’你会搜到close的那个xpath,然后实现点掉弹出对话框的目的。

run,等结果,看下结果:(如有侵权(图片的),请及时联系删除)
在这里插入图片描述

这篇关于python 爬LOFTER 稍微升级,能够爬下一个人的所有上传的图片。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/311575

相关文章

基于Python实现一个图片拆分工具

《基于Python实现一个图片拆分工具》这篇文章主要为大家详细介绍了如何基于Python实现一个图片拆分工具,可以根据需要的行数和列数进行拆分,感兴趣的小伙伴可以跟随小编一起学习一下... 简单介绍先自己选择输入的图片,默认是输出到项目文件夹中,可以自己选择其他的文件夹,选择需要拆分的行数和列数,可以通过

Python中反转字符串的常见方法小结

《Python中反转字符串的常见方法小结》在Python中,字符串对象没有内置的反转方法,然而,在实际开发中,我们经常会遇到需要反转字符串的场景,比如处理回文字符串、文本加密等,因此,掌握如何在Pyt... 目录python中反转字符串的方法技术背景实现步骤1. 使用切片2. 使用 reversed() 函

Python中将嵌套列表扁平化的多种实现方法

《Python中将嵌套列表扁平化的多种实现方法》在Python编程中,我们常常会遇到需要将嵌套列表(即列表中包含列表)转换为一个一维的扁平列表的需求,本文将给大家介绍了多种实现这一目标的方法,需要的朋... 目录python中将嵌套列表扁平化的方法技术背景实现步骤1. 使用嵌套列表推导式2. 使用itert

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

Python使用pip工具实现包自动更新的多种方法

《Python使用pip工具实现包自动更新的多种方法》本文深入探讨了使用Python的pip工具实现包自动更新的各种方法和技术,我们将从基础概念开始,逐步介绍手动更新方法、自动化脚本编写、结合CI/C... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

Conda与Python venv虚拟环境的区别与使用方法详解

《Conda与Pythonvenv虚拟环境的区别与使用方法详解》随着Python社区的成长,虚拟环境的概念和技术也在不断发展,:本文主要介绍Conda与Pythonvenv虚拟环境的区别与使用... 目录前言一、Conda 与 python venv 的核心区别1. Conda 的特点2. Python v

Python使用python-can实现合并BLF文件

《Python使用python-can实现合并BLF文件》python-can库是Python生态中专注于CAN总线通信与数据处理的强大工具,本文将使用python-can为BLF文件合并提供高效灵活... 目录一、python-can 库:CAN 数据处理的利器二、BLF 文件合并核心代码解析1. 基础合

Python使用OpenCV实现获取视频时长的小工具

《Python使用OpenCV实现获取视频时长的小工具》在处理视频数据时,获取视频的时长是一项常见且基础的需求,本文将详细介绍如何使用Python和OpenCV获取视频时长,并对每一行代码进行深入解析... 目录一、代码实现二、代码解析1. 导入 OpenCV 库2. 定义获取视频时长的函数3. 打开视频文

Python中你不知道的gzip高级用法分享

《Python中你不知道的gzip高级用法分享》在当今大数据时代,数据存储和传输成本已成为每个开发者必须考虑的问题,Python内置的gzip模块提供了一种简单高效的解决方案,下面小编就来和大家详细讲... 目录前言:为什么数据压缩如此重要1. gzip 模块基础介绍2. 基本压缩与解压缩操作2.1 压缩文