Python爬虫学习总结-爬取某素材网图片

⭐Python爬虫学习总结-爬取某素材网图片

最近在学习python爬虫,完成了一个简单的爬取某素材网站的功能,记录操作实现的过程,增加对爬虫的使用和了解。

1️⃣ 前期准备

1.1 浏览器安装xpath插件(以chrome浏览器为例)

插件下载地址:https://wwa.lanzout.com/iUwy601einob

将插件手动拖拽到浏览器扩展中即可完成安装(安装完后需要重启浏览器)

启动插件快捷键Ctrl+shift+x

1.2 安转lxml依赖

安转lxml依赖前,需要安装有pip才能下载依赖

查看电脑是否安装pip指令:pip -V

安装lxml前需要先进入到python解释器的Scripts路径中

安装指令:pip install lxml ‐i https://pypi.douban.com/simple

1.3 学习xpath基本语法

xpath基本语法:

1.路径查询

//:查找所有子孙节点,不考虑层级关系

/ :找直接子节点

2.谓词查询

//div[@id]

//div[@id="maincontent"]

3.属性查询

//@class

4.模糊查询

//div[contains(@id, "he")]

//div[starts‐with(@id, "he")]

5.内容查询

//div/h1/text()

6.逻辑运算

//div[@id="head" and @class="s_down"]

//title | //price

2️⃣ 分析界面

以站长素材网站为例:https://sc.chinaz.com/

2.1查看图片页面的源码,分析页面链接规律

打开有侧边栏的风景图片(以风景图片为例,分析网页源码)

第一页图片的地址:https://sc.chinaz.com/tupian/fengjingtupian.html

第二页图片的地址:https://sc.chinaz.com/tupian/fengjingtupian_2.html

第三页图片的地址:https://sc.chinaz.com/tupian/fengjingtupian_3.html

第n页图片的地址:https://sc.chinaz.com/tupian/fengjingtupian_page.html page是代表当前的页数

⭐通过分析网址可以得到每页网址的规律,接下来分析图片地址如何获取到

2.2 分析如何获取图片下载地址

首先在第一页通过F12打开开发者工具,找到图片在源代码中位置

:⭐通过分析源码可以看到图片的下载地址和图片的名字,接下来通过xpath解析,获取到图片名字和图片地址

2.3 xpath解析获取图片地址和名字

调用xpath插件得到图片名字://div[@id="container"]//img/@alt

图片下载地址://div[@id="container"]//img/@src2

注意:由于该界面图片的加载方式是懒加载,一开始获取到的图片下载地址才是真正的下载地址也就是src2标签

⭐前面的工作准备好了,接下来就是书写代码

3️⃣代码实现

3.1 导入对应库

import urllib.request from lxml import etree

3.2 函数书写

请求对象的定制

def create_request(page,url): # 对不同页面采用不同策略 if (page==1): url_end = url else: #切割字符串 url_temp = url[:-5] url_end = url_temp+'_'+str(page)+'.html' # 如果没有输入url就使用默认的url if(url==''): url_end = 'https://sc.chinaz.com/tupian/fengjingtupian.html' # 请求伪装 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36 Edg/99.0.1150.39' } # 请求对象的定制 request = urllib.request.Request(url = url_end,headers=headers) # 返回伪装后的请求头 return request

获取网页源码

def get_content(request): # 发送请求获取响应数据 response = urllib.request.urlopen(request) # 将响应数据保存到content content = response.read().decode('utf8') # 返回响应数据 return content

下载图片到本地

def down_load(content): # 下载图片 #urllib.request.urlretrieve('图片名称','文件名字') # 解析网页 tree = etree.HTML(content) # 获取图片姓名 返回的是列表 img_name = tree.xpath('//div[@id="container"]//a/img/@alt') img_add = tree.xpath('//div[@id="container"]//a/img/@src2') # 循环下载图片 for i in range(len(img_name)): # 挨个获取下载的图片名字和地址 name = img_name[i] add = img_add[i] # 对图片下载地址进行定制 url = 'https:'+add # 下载到本地 下载图片到当前代码同一文件夹的imgs文件夹中 需要先在该代码文件夹下创建imgs文件夹 urllib.request.urlretrieve(url=url,filename='./imgs/'+name+'.jpg')

主函数

if __name__ == '__main__': print('该程序为采集站长素材图片') url = input("请输入站长素材图片第一页的地址(内置默认为风景图片)") start_page = int(input('请输入起始页码')) end_page = int(input('请输入结束页码')) for page in range(start_page,end_page+1): #请求对象的定制 request = create_request(page,url) # 获取网页的源码 content = get_content(request) # 下载 down_load(content)

💻完整代码

# 1.请求对象的定制 # 2.获取网页源码 # 3.下载 # 需求:下载前十页的图片 # 第一页:https://sc.chinaz.com/tupian/touxiangtupian.html # 第二页:https://sc.chinaz.com/tupian/touxiangtupian_2.html # 第三页:https://sc.chinaz.com/tupian/touxiangtupian_3.html # 第n页:https://sc.chinaz.com/tupian/touxiangtupian_page.html import urllib.request from lxml import etree # 站长素材图片爬取下载器 def create_request(page,url): # 对不同页面采用不同策略 if (page==1): url_end = url else: #切割字符串 url_temp = url[:-5] url_end = url_temp+'_'+str(page)+'.html' # 如果没有输入url就使用默认的url if(url==''): url_end = 'https://sc.chinaz.com/tupian/fengjingtupian.html' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36 Edg/99.0.1150.39' } request = urllib.request.Request(url = url_end,headers=headers) return request def get_content(request): response = urllib.request.urlopen(request) content = response.read().decode('utf8') return content def down_load(content): # 下载图片 #urllib.request.urlretrieve('图片名称','文件名字') tree = etree.HTML(content) # 获取图片姓名 返回的是列表 img_name = tree.xpath('//div[@id="container"]//a/img/@alt') img_add = tree.xpath('//div[@id="container"]//a/img/@src2') for i in range(len(img_name)): name = img_name[i] add = img_add[i] # 对图片下载地址进行定制 url = 'https:'+add # 下载到本地 urllib.request.urlretrieve(url=url,filename='./imgs/'+name+'.jpg') if __name__ == '__main__': print('该程序为采集站长素材图片') url = input("请输入站长素材图片第一页的地址(内置默认为风景图片)") start_page = int(input('请输入起始页码')) end_page = int(input('请输入结束页码')) for page in range(start_page,end_page+1): #请求对象的定制 request = create_request(page,url) # 获取网页的源码 content = get_content(request) # 下载 down_load(content)

4️⃣运行结果

🚀总结

此次案例是基于尚硅谷的python视频学习后的总结,感兴趣的可以去看全套视频,尚硅谷Python爬虫教程小白零基础速通(含python基础+爬虫案例)_哔哩哔哩_bilibili

人们总说兴趣是最好的老师,自从接触爬虫后我觉得python十分有趣,这也是我学习的动力,通过对一次案例的简单总结,回顾已经学习的知识,并不断学习新知识,是记录也是分享。


__EOF__

本文作者lnnau
本文链接https://www.cnblogs.com/wlunan/p/16008891.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Lnnau  阅读(537)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示