python爬虫系列:xpath爬取图片讲解(零基础向)
系列文章目录
python爬虫系列:BeautifulSoup爬取小说讲解(零基础向)(版权问题下架)
python爬虫系列:requests下载酷我音乐讲解(零基础向)(版权问题下架)
文章目录
目录
系列文章目录
文章目录
一、思路
二、使用步骤
1.引入库
2.代码分析
总结
先放上代码,因为本人是萌新,所以代码和爬取的数据都是不美观的请见谅(没有第四行的代码也完全可以只不过都要再缩进)。
from lxml import etree #导入Xpath
import requests
import os
if __name__ == '__main__':url = "https://pic.netbian.com/4kdongman/index.html"headers = {"user-agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3947.100 Safari/537.36"}res = requests.get(url,headers=headers).text.encode("ISO-8859-1") #中文转码tree = etree.HTML(res) #实例化HTMLpictict = tree.xpath('//div[@class="slist"]//li') #获取<li>的数据if not os.path.exists("./pictict") : #创建文件以便保存图片os.mkdir("./pictict")for list in pictict :html = 'https://pic.netbian.com' + list.xpath("./a/img/@src")[0] #循环获取图片的urlname = list.xpath("./a/img/@alt")[0] + ".png" #获取图片名称pictict_get = requests.get(url=html,headers=headers).content #进行持久化存储name_path = "pictict/" + name #with open(name_path,"wb") as f:f.write(pictict_get)print(name , "下载完成")page = input("页数:") #因为第一张和后面的不太一样所以就从新写了一个page = int(page)for i in range(page) :url_next = "https://pic.netbian.com/4kdongman/index_{}.html".format(page)get_next = requests.get(url_next,headers=headers).text.encode("ISO-8859-1")tree_next = etree.HTML(get_next)pictict_next = tree_next.xpath('//div[@class="slist"]//li')for list2 in pictict_next :html_next = 'https://pic.netbian.com' + list2.xpath("./a/img/@src")[0]name_next = list2.xpath("./a/img/@alt")[0] + ".png"pictict_get_next = requests.get(url=html_next, headers=headers).contentname_path_next = "pictict/" + name_nextwith open(name_path_next, "wb") as f:f.write(pictict_get_next)print(name_next, "下载完成")
一、思路
1.我们要明确我们的目标
2.我们要分析怎样实现目标
3.进行详细的代码敲写
二、使用步骤
1.引入库
这次我们要使用Xpath来进行图片的爬取,所以我们先进行安装库,话说是使用xpath,实际上就是把lxml,下下来。
pip install lxml
2.代码分析
Xpath并不是像requests那样导入,而是使用from lxml import etree这样来导入,而且在这里说一下,当你使用Xpath的时候Xpath是没有补全的,不过Xpath仍能正常使用。
其次我们也需要requests来进行从网页源码导入Xpath。
from lxml import etree #导入Xpath
import requests
接下来就是实例化网页源码,先按F12进入开发者工具(记得按F5刷新),再看下面几幅图。
我们可以看到这个网页支持get请求,所以我们就用requests中的get请求。
url = "https://pic.netbian.com/4kdongman/index.html"
headers = {"user-agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36(KHTML,like Gecko) Chrome/69.0.3947.100 Safari/537.36"}
res = requests.get(url,headers=headers).text.encode("ISO-8859-1") #中文转码
tree = etree.HTML(res) #实例化HTML
我们也要使用headers进行UA伪装,你也不必这么纠结这个UA伪装,他的意思就是让网页识别我们为用户而非爬虫,记住小心复制上空格以导致运行时出错。大家也可能看到我圈的cookie了,你可以把它当做饼干,可以贿赂网页,但在这我没写。我们就用get进行请求,因为我们要实例化网页源码才能使用Xpath来进行爬取图片,所以我们后面就跟上了 .text 以便实例化,后面的就是中文转码,要不然名字什么的,都是乱码。Xpath就是用 etree.HTML 进行实例化,这是网页的实例化,还可以本地的保存的HTML实例化,用 etree.parse 进行本地的实例化。
既然实例化好了,那么我们就应该来找到每张壁纸的url,来进行爬取,我们进行网页分析。
这么一看,这些个图片的url藏得有点深,不过还是可以一步一步的爬出来。
pictict = tree.xpath('//div[@class="slist"]//li') #获取<li>的数据
仅这一行代码就可以爬到
标签,我来说下这层代码的含义(Xpath没补全是正常的)。
如果看过那篇BeautifulSoup的话应该也会明白一点,虽然BeautifulSoup和Xpath的关系不大,不过他们的用法却有些相似,因为BeautifulSoup是空格跨级爬取,而在Xpath是通过//来进行跨级爬取,因为简单所以我直接就用//直接跳到了
标签这里。
毕竟要爬的准确一点,所以就有了div后面的那一块,它并不能向BeautifulSoup那样直接输入,它需要用[ ]来进行输入,还要加@,这样以后才能输入div后面的内容。
我们又拿到了
标签,我们就需要循环来帮我们拿到全部的标签的内容,我们就用 for...in... 循环来进行循环。
for list in pictict :html = 'https://pic.netbian.com' + list.xpath("./a/img/@src")[0] #循环获取图片的urlname = list.xpath("./a/img/@alt")[0] + ".png" #获取图片名称
我们再来看一下网页。
图片的url在里面,那我们怎么获取呢?
html = 'https://pic.netbian.com' + list.xpath("./a/img/@src")[0]
上面我们也说了//是跳级,不过/就不是了,它是一级一级的爬,所以就用/来到了标签里,而想要获取到src,就需要一个Xpath的用法了,那就是@,再通过/@src就能获得它的内容,是不是感觉Xpath还是蛮好用的?在讲一下前面的 . 这个点的意思就是在
标签中。还有那个 [0],因为你 获取的是一个列表,所以你 要把列表的[ ]给去掉,所以就用了这个来进行 索引, 因为索引是从0开始的,所以就用了[0]。
再看一下网页 ,毕竟我们要一个整的图片的url,刚才获取的只不过是一部分。
可见它的地址是https://pic.netbian.com/uploads/allimg/210621/225658-162428741823f5.jpg,而我们获取的地址是/uploads/allimg/210621/225658-162428741823f5.jpg,由此我们可以看出图片的整个url缺的是https://pic.netbian.com,然后通过上面的代码把它们拼接在一起就可以了。
图片也总得有个名字进行保存,我们就去网页看看名字在哪里。
这么一看名字在这个地方,那么获取方法不就和上面的一样了吗?大家自己悟一下吧。
图片url和名称我们都有了,接下来就是保存了。
pictict_get = requests.get(url=html,headers=headers).content #进行持久化存储
name_path = "pictict/" + name #
with open(name_path,"wb") as f:f.write(pictict_get)print(name , "下载完成")
requests中保存的用法就是.content,这个用法就是持久化存储,我们只要把上面我们拿到的url放上就行,还有那些大部分都是自己取的名字,不必太在意。第二行的代码意思是,在pictict的文件夹下面,相当于一个路径,因为之前的name后面加了".png"所以在第三行保存时就不用写了,关于文件读写可以去看大佬的文章传送门。在这里就简单讲一下,wb就是写入的意思(好像w也行),后面的f也是可以自己编。下完要记得提醒一下,要不然啥也不知道,于是就我们打印一下某某某下载完成就行了。
这只是第一页,第二页就和第一页不同了。
这是第一页。
这是第二页。
这是第三页。
看出他们之间的差异了吧,2,3页多了个_2和_3。那我们怎么办?
page = input("页数:") #因为第一张和后面的不太一样所以就从新写了一个
page = int(page)
for i in range(page) :url_next = "https://pic.netbian.com/4kdongman/index_{}.html".format(page)
因为input这个可以自己输入,所以我们就用这个,因为input返回的是字符串,不是数字,所以我们才会用int来变成数字,我们再用到range()这个函数,这个函数配上for....in... 循环可以循环数字,比如range(5),会输出:1,2,3,4,5 。所以我们选择这个。后面的.format()可以讲我们所循环的数字一个一个的输进去,不过在我们要换数字的地方要换上大括号。
下面的内容就和上面一样了,只不过名字都换了一下。
总结
善于分析网页的结构,有清晰的思路,灵活运用各种方法。
文章有不对的地方请大佬指正。
python爬虫系列:xpath爬取图片讲解(零基础向)相关推荐
- Python爬虫系列之爬取微信公众号新闻数据
Python爬虫系列之爬取微信公众号新闻数据 小程序爬虫接单.app爬虫接单.网页爬虫接单.接口定制.网站开发.小程序开发 > 点击这里联系我们 < 微信请扫描下方二维码 代码仅供学习交流 ...
- Python爬虫系列之爬取某奢侈品小程序店铺商品数据
Python爬虫系列之爬取某奢侈品小程序店铺商品数据 小程序爬虫接单.app爬虫接单.网页爬虫接单.接口定制.网站开发.小程序开发> 点击这里联系我们 < 微信请扫描下方二维码 代码仅供学 ...
- Python爬虫:Xpath爬取网页信息(附代码)
Python爬虫:Xpath爬取网页信息(附代码) 上一次分享了使用Python简单爬取网页信息的方法.但是仅仅对于单一网页的信息爬取一般无法满足我们的数据需求.对于一般的数据需求,我们通常需要从一个 ...
- Python爬虫系列之爬取某优选微信小程序全国店铺商品数据
Python爬虫系列之爬取某优选微信小程序全国商品数据 小程序爬虫接单.app爬虫接单.网页爬虫接单.接口定制.网站开发.小程序开发 > 点击这里联系我们 < 微信请扫描下方二维码 代码仅 ...
- Python爬虫系列之爬取某社区团微信小程序店铺商品数据
Python爬虫系列之爬取某社区团微信小程序店铺商品数据 如有问题QQ请> 点击这里联系我们 < 微信请扫描下方二维码 代码仅供学习交流,请勿用于非法用途 数据库仅用于去重使用,数据主要存 ...
- python爬虫——使用xpath爬取搜狗微信文章
缺点:爬取一定数量之后会出现验证码,导致不能继续爬取,需要更换ip才可以继续爬取,或者在浏览器重新输入验证码之后复制cookie后方能继续爬取. import requests from fake_u ...
- Python爬虫系列:爬取小说并写入txt文件
导语: 哈喽,哈喽~都说手机自带的浏览器是看小说最好的一个APP,不须要下载任何软件,直接百度就ok了. 但是小编还是想说,如果没有网,度娘还是度娘吗?能把小说下载成一个.txt文件看不是更香吗?这能 ...
- scrapy爬虫系列之三--爬取图片保存到本地
功能点:如何爬取图片,并保存到本地 爬取网站:斗鱼主播 完整代码:https://files.cnblogs.com/files/bookwed/Douyu.zip 主要代码: douyu.py im ...
- Python 爬虫系列:爬取全球机场信息
前言 最近公司需要全球机场信息,用来做一些数据分析.刚好发现有个网站上有这个信息,只是没有机场的经纬度信息,不过有了机场信息,经纬度信息到时候我们自己补上去就行 网站元素分析 我们找到了有这些信息的网 ...
最新文章
- LeetCode Add Strings(大整数加法)
- 使用python 实现icmp测试主机存活性
- ASP.NET分页方法的了解程度
- Makefile中 -I -L -l区别
- 测试Maven版本插件自动递增版本号
- 乐玩自动化测试模块_自动化测试模型(一)自动化测试模型介绍
- 推荐笔记本用户使用的硬盘。。。2.5”战胜台式机硬盘 日立7K320-250GB
- 使用VS2015编写C/C++开始步骤
- php数组验证用户名密码,求个php数组验证问题,在线等
- 小白电商美工(设计师)都该了解一下PSD分层模板
- LIRe提供的图像检索算法的速度
- python输入文字、成为字典_python中将字典形式的数据循环插入Excel
- Python学习笔记[5]---else语句和with语句
- 20款开源搜索引擎介绍与比较
- FW: 10家不错的iphone编程资源站
- 自定义鼠标指针图案每次开机或者重启都会重置的解决办法
- 三页搞定GB2818/SIP/RTP、PS封装
- Navicat15安装教程
- 用纯css实现一个图片拼接九宫格
- 服务器系统xb21cn,Office2010/2016精简三合一版(xb21cn-0901版)
热门文章
- 图文讲解Zabbix 分布式监控平台添加服务监控项(http,nginx,mysql)
- Android Studio开发-1 安装AS
- 抖音3d照片怎么制作html,抖音制作3D卡通小人怎么制作用什么软件 操作步骤介绍...
- 牛奶可乐经济学之Q14:为什么参加相亲不靠谱?
- 从泳坛王子到游击队长 雅典奥运会告别英雄TOP10[zt]
- 第一章 什么是CRM?
- Pycharm安装包
- 西密歇根大学计算机科学专业排名,西密歇根大学有哪些专业_专业排名(USNEWS美国大学排名)...
- 用 Python 爬取 QQ 空间说说和相册
- m基于RBF神经网络和BP神经网络的信道估计误码率matlab仿真