【好好学爬虫3】用xpath爬取chinaz人体艺术图片
本帖最后由 雨晨 于 2022-2-11 20:01 编辑用xpath爬取chinaz人体艺术照片
1.网站url:https://sc.chinaz.com/tupian/rentiyishu.html
2.爬取原图不是缩略图
思路:
1.打开网站分析图片数据集是不是动态加载 ,打开网站按F12打开开发者工具 我用的浏览器是 Chrome
可以看到url是一致的
下面再看response的数据不是动态加载的
2.直接在网页源代码里拿数据
点击elements这里面就是网页源代码
3.鼠标点击箭头再点击图片就能找到图片url位置
用xpath定位id属性值为container的位置 在找div标签
li_list=tree.xpath('//*[@id="container"]/div') 页面图片所有的数据
找这个定位有一个简单的方法
鼠标点到标签位置 右键--Copy--Copy XPath
//*[@id="container"]/div 表示第一个数据去掉就能拿到所有的图片div
定位到位置
li_list=tree.xpath('//*[@id="container"]/div')img_url="https:"+i.xpath("./div/a/@href")#拿到图片下的url拿到a标签下href的值 字符串拼接
title=i.xpath("./div/a/@alt")+".jpg"#图片标题名称和图片格式,字符串拼接,保持图片用4.拿到缩略图url再出发起请求,用同样的方法获取原图的url有两种方式可以获得一个是直接在原图获取url下载另外就是下面的下载地址直接标签位置 右键--Copy--Copy XPath就可以定位到
上代码
from lxml import etree#xpath所用的包
import requests
import os#创建文件
#1.用OS创建文件夹
chinaz="chinaz" #文件夹名称
if not os.path.exists(chinaz): ##如果文件夹不存在,则新建,否则不新建
os.mkdir(chinaz)
#2.url和请求伪装
url="https://sc.chinaz.com/tupian/rentiyishu.html"
headers={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"
} #UA伪装
#3.发起请求
reques=requests.get(url=url,headers=headers)
reques.encoding="utf-8" #网站编码
#4.获取页面数据
reques_text=reques.text
#5.HTML()专门用来解析网络请求到的页面源码数据
tree=etree.HTML(reques_text)
#6.用xpath定位找到标签对象
li_list=tree.xpath('//*[@id="container"]/div') #存储格式为列表
for i in li_list: #循环拿数据
img_url="https:"+i.xpath("./div/a/@href")#拿到图片下的url字符串拼接
title=i.xpath("./div/a/@alt")+".jpg"#图片标题名称和图片格式,字符串拼接,保持图片用
requesi_text=requests.get(url=img_url,headers=headers).text#上面拿到的url在次发起请求
tree_img=etree.HTML(requesi_text)
img_list="https:"+tree_img.xpath('//div[@class="down_img"]/div/a/@href')#拿到a标签下href的值
dow_data=requests.get(url=img_list,headers=headers).content#对图片地址发起请求,图片为二进制保存content转换为二进制
meinv=chinaz+"/"+title #保持路径和图片名称
with open(meinv,"wb") as fp:#写入文件
fp.write(dow_data)
print(title,"下载成功")
#调用etree对象的xpath方法结合不同形式的xpath表达式进行标签定位和数据提取
#xpath返回的一定是列表,列表中存储的是定位到的标签对象
# title_tag = tree.xpath('/html/head/title')
# title_tag = tree.xpath('/html//title')
# title_tag = tree.xpath('//head/title')
# title_tag = tree.xpath('//title') #推荐
#最左侧为/:表示必须从树的根标签(html标签)开始进行定位
#最左侧为//:可以从任意位置进行标签的相对位置定位
#非最左侧的/:表示一个层级
#非最左侧的//:表示多个层级
# tag = tree.xpath('//div') #定位所有的div标签
#属性定位:根据标签的属性定位标签
#//tagName[@attrName="attrValue"]
# tag = tree.xpath('//div[@class="song"]')#定位class属性值为song的div标签
# tag = tree.xpath('//a[@id="feng"]')
# tag = tree.xpath('//div[@class="tang"]/ul/li/a[@id="feng"]')
#索引定位:索引是从1开始的
# tag = tree.xpath('//div[@class="tang"]/ul/li')#定位到第三个li标签
#获取定位到标签中的文本内容
# /text()获取标签中直系的文本内容:返回的列表中只会有一个列表元素
# //text()获取标签中所有的文本内容:通常返回列表中存在多个元素
# tag = tree.xpath('//div[@class="song"]/p/text()')
# tag = tree.xpath('//div[@class="song"]//text()')
#获取定位到标签中的属性值://tag/@attrName
from lxml import etree#xpath所用的包
import requests
import os#创建文件
#1.用OS创建文件夹
chinaz="chinaz" #文件夹名称
if not os.path.exists(chinaz): ##如果文件夹不存在,则新建,否则不新建
os.mkdir(chinaz)
#2.url和请求伪装
url="https://sc.chinaz.com/tupian/rentiyishu.html"
headers={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"
} #UA伪装
#3.发起请求
reques=requests.get(url=url,headers=headers)
reques.encoding="utf-8" #网站编码
#4.获取页面数据
reques_text=reques.text
#5.HTML()专门用来解析网络请求到的页面源码数据
tree=etree.HTML(reques_text)
#6.用xpath定位找到标签对象
li_list=tree.xpath('//*[@id="container"]/div') #存储格式为列表
for i in li_list: #循环拿数据
img_url="https:"+i.xpath("./div/a/@href")#拿到图片下的url字符串拼接
title=i.xpath("./div/a/@alt")+".jpg"#图片标题名称和图片格式,字符串拼接,保持图片用
requesi_text=requests.get(url=img_url,headers=headers).text#上面拿到的url在次发起请求
tree_img=etree.HTML(requesi_text)
img_list="https:"+tree_img.xpath('//div[@class="down_img"]/div/a/@href')#拿到a标签下href的值
dow_data=requests.get(url=img_list,headers=headers).content#对图片地址发起请求,图片为二进制保存content转换为二进制
meinv=chinaz+"/"+title #保持路径和图片名称
with open(meinv,"wb") as fp:#写入文件
fp.write(dow_data)
print(title,"下载成功")
很棒!一起学习,顺手帮忙把缩进搞了下。 这个下载的是图片,楼主可以下载压缩的文件,就是高清大图了
xpath地址://div/div[@class="dian"]/a/@href
获取到的地址是(共12个)
https://downsc.chinaz.net/Files/DownLoad/pic9/202203/apic38952.rar
https://downsc.chinaz.net/Files/DownLoad/pic9/202203/apic38952.rar
下载后就是高清大图
来学习学习! 复制着运行了一下,下载了40个文件。 复制着运行了一下,下载了40个文件 人体艺术是什么意思? 学习。。。。。。。。。。 不错不错,分析思路,再上源码。值得学习! 哇塞 了嗷 学习了,在努力学习XPATH的属性用法
页:
[1]
2