系列文章目录

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爬取图片讲解(零基础向)相关推荐

  1. Python爬虫系列之爬取微信公众号新闻数据

    Python爬虫系列之爬取微信公众号新闻数据 小程序爬虫接单.app爬虫接单.网页爬虫接单.接口定制.网站开发.小程序开发 > 点击这里联系我们 < 微信请扫描下方二维码 代码仅供学习交流 ...

  2. Python爬虫系列之爬取某奢侈品小程序店铺商品数据

    Python爬虫系列之爬取某奢侈品小程序店铺商品数据 小程序爬虫接单.app爬虫接单.网页爬虫接单.接口定制.网站开发.小程序开发> 点击这里联系我们 < 微信请扫描下方二维码 代码仅供学 ...

  3. Python爬虫:Xpath爬取网页信息(附代码)

    Python爬虫:Xpath爬取网页信息(附代码) 上一次分享了使用Python简单爬取网页信息的方法.但是仅仅对于单一网页的信息爬取一般无法满足我们的数据需求.对于一般的数据需求,我们通常需要从一个 ...

  4. Python爬虫系列之爬取某优选微信小程序全国店铺商品数据

    Python爬虫系列之爬取某优选微信小程序全国商品数据 小程序爬虫接单.app爬虫接单.网页爬虫接单.接口定制.网站开发.小程序开发 > 点击这里联系我们 < 微信请扫描下方二维码 代码仅 ...

  5. Python爬虫系列之爬取某社区团微信小程序店铺商品数据

    Python爬虫系列之爬取某社区团微信小程序店铺商品数据 如有问题QQ请> 点击这里联系我们 < 微信请扫描下方二维码 代码仅供学习交流,请勿用于非法用途 数据库仅用于去重使用,数据主要存 ...

  6. python爬虫——使用xpath爬取搜狗微信文章

    缺点:爬取一定数量之后会出现验证码,导致不能继续爬取,需要更换ip才可以继续爬取,或者在浏览器重新输入验证码之后复制cookie后方能继续爬取. import requests from fake_u ...

  7. Python爬虫系列:爬取小说并写入txt文件

    导语: 哈喽,哈喽~都说手机自带的浏览器是看小说最好的一个APP,不须要下载任何软件,直接百度就ok了. 但是小编还是想说,如果没有网,度娘还是度娘吗?能把小说下载成一个.txt文件看不是更香吗?这能 ...

  8. scrapy爬虫系列之三--爬取图片保存到本地

    功能点:如何爬取图片,并保存到本地 爬取网站:斗鱼主播 完整代码:https://files.cnblogs.com/files/bookwed/Douyu.zip 主要代码: douyu.py im ...

  9. Python 爬虫系列:爬取全球机场信息

    前言 最近公司需要全球机场信息,用来做一些数据分析.刚好发现有个网站上有这个信息,只是没有机场的经纬度信息,不过有了机场信息,经纬度信息到时候我们自己补上去就行 网站元素分析 我们找到了有这些信息的网 ...

最新文章

  1. LeetCode Add Strings(大整数加法)
  2. 使用python 实现icmp测试主机存活性
  3. ASP.NET分页方法的了解程度
  4. Makefile中 -I -L -l区别
  5. 测试Maven版本插件自动递增版本号
  6. 乐玩自动化测试模块_自动化测试模型(一)自动化测试模型介绍
  7. 推荐笔记本用户使用的硬盘。。。2.5”战胜台式机硬盘 日立7K320-250GB
  8. 使用VS2015编写C/C++开始步骤
  9. php数组验证用户名密码,求个php数组验证问题,在线等
  10. 小白电商美工(设计师)都该了解一下PSD分层模板
  11. LIRe提供的图像检索算法的速度
  12. python输入文字、成为字典_python中将字典形式的数据循环插入Excel
  13. Python学习笔记[5]---else语句和with语句
  14. 20款开源搜索引擎介绍与比较
  15. FW: 10家不错的iphone编程资源站
  16. 自定义鼠标指针图案每次开机或者重启都会重置的解决办法
  17. 三页搞定GB2818/SIP/RTP、PS封装
  18. Navicat15安装教程
  19. 用纯css实现一个图片拼接九宫格
  20. 服务器系统xb21cn,Office2010/2016精简三合一版(xb21cn-0901版)

热门文章

  1. 图文讲解Zabbix 分布式监控平台添加服务监控项(http,nginx,mysql)
  2. Android Studio开发-1 安装AS
  3. 抖音3d照片怎么制作html,抖音制作3D卡通小人怎么制作用什么软件 操作步骤介绍...
  4. 牛奶可乐经济学之Q14:为什么参加相亲不靠谱?
  5. 从泳坛王子到游击队长 雅典奥运会告别英雄TOP10[zt]
  6. 第一章 什么是CRM?
  7. Pycharm安装包
  8. 西密歇根大学计算机科学专业排名,西密歇根大学有哪些专业_专业排名(USNEWS美国大学排名)...
  9. 用 Python 爬取 QQ 空间说说和相册
  10. m基于RBF神经网络和BP神经网络的信道估计误码率matlab仿真