吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4737|回复: 14
收起左侧

[Python 转载] 【好好学爬虫3】用xpath爬取chinaz人体艺术图片

[复制链接]
雨晨 发表于 2022-2-11 19:36
本帖最后由 雨晨 于 2022-2-11 20:01 编辑

用xpath爬取chinaz人体艺术照片
1.网站url:https://sc.chinaz.com/tupian/rentiyishu.html
2.爬取原图不是缩略图

思路:
1.打开网站分析图片数据集是不是动态加载 ,打开网站按F12  打开开发者工具   我用的浏览器是 Chrome
image.png
可以看到url是一致的
下面再看response的数据不是动态加载的

image.png
2.直接在网页源代码里拿数据
image.png
点击elements  这里面就是网页源代码
3.鼠标点击箭头  再点击图片  就能找到图片url位置
image.png
用xpath定位id属性值为container的位置 在找div标签
li_list=tree.xpath('//*[@id="container"]/div') 页面图片所有的数据
image.png
找这个定位有一个简单的方法
鼠标点到标签位置 右键--Copy--Copy XPath  
//*[@id="container"]/div[1]   [1]表示第一个数据  去掉就能拿到所有的图片div
定位到位置
li_list=tree.xpath('//*[@id="container"]/div')img_url="https:"+i.xpath("./div/a/@href")[0]  #拿到图片下的url  拿到a标签下href的值    字符串拼接
title=i.xpath("./div/a/@alt")[0]+".jpg"  #图片标题名称和图片格式,字符串拼接,保持图片用
4.拿到缩略图url  再出发起请求,用同样的方法  获取原图的url有两种方式可以获得  一个是直接在原图获取url下载  另外就是下面的下载地址直接标签位置 右键--Copy--Copy XPath  就可以定位到
image.png
上代码
[Python] 纯文本查看 复制代码
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")[0]  #拿到图片下的url  字符串拼接
title=i.xpath("./div/a/@alt")[0]+".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[3]/a/@href')[0]  #拿到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,"下载成功")



[Python] 纯文本查看 复制代码
#调用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[3]')#定位到第三个li标签
#获取定位到标签中的文本内容
    # /text()获取标签中直系的文本内容:返回的列表中只会有一个列表元素
    # //text()获取标签中所有的文本内容:通常返回列表中存在多个元素
# tag = tree.xpath('//div[@class="song"]/p[3]/text()')
# tag = tree.xpath('//div[@class="song"]//text()')
#获取定位到标签中的属性值://tag/@attrName







免费评分

参与人数 2吾爱币 +2 收起 理由
wildpeter + 1 我很赞同!
endriver + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

halfone 发表于 2022-2-21 09:37
[Python] 纯文本查看 复制代码
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")[0]  #拿到图片下的url  字符串拼接
    title=i.xpath("./div/a/@alt")[0]+".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[3]/a/@href')[0]  #拿到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,"下载成功")


很棒!一起学习,顺手帮忙把缩进搞了下。
yjn866y 发表于 2022-3-10 17:13
这个下载的是图片,楼主可以下载压缩的文件,就是高清大图了
xpath地址://div/div[@class="dian"]/a/@href

获取到的地址是(共12个)
https://downsc.chinaz.net/Files/ ... 02203/apic38952.rar
https://downsc.chinaz.net/Files/ ... 02203/apic38952.rar
下载后就是高清大图

qiannideyoushou 发表于 2022-2-18 09:00
endriver 发表于 2022-2-21 11:11
复制着运行了一下,下载了40个文件。
DS777 发表于 2022-2-21 16:53
复制着运行了一下,下载了40个文件
kindnesslei 发表于 2022-2-22 10:05
人体艺术是什么意思?
studentguo 发表于 2022-2-22 20:05
学习。。。。。。。。。。
kenpt 发表于 2022-2-28 13:47
不错不错,分析思路,再上源码。值得学习!
Fxhlt 发表于 2022-2-28 21:47
哇塞 了嗷
mmlinkme 发表于 2022-3-4 09:44
学习了,在努力学习XPATH的属性用法
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 01:23

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表