Python 自学记录(自定义爬取图片类型,页数 爬取站长之家图片)

入门级别
需要用到 lxml库和相关知识,用到 代理的知识(没用到代理池)等

lxml 方法知识记录

获取responce 返回的页面数据

tree = etree.HTML(context)

路径查询

// 代表N多级 / 代表一级
tree.xpath("//tr/td/text()") # 查询tr标签下的td标签中的内容

查询 有 某个属性 的

[@属性名]

tree.xpath("//div//th[@id]/text()") #查询有id属性的th标签 text() 为显示内容

查询 某个属性和值 的

[@属性名=‘值’]
tree.xpath("//div//th[@id=‘l1’]/text()") #查询id属性值为 l1 的th标签

获取标签属性值

/@属性名
tree.xpath("//tr/td/@data-title")# 获取 td 标签中 data-title 的属性值

查询 多个属性和值 的

[@属性名=‘值’ and @属性名=‘值’]
tree.xpath("//div//th[@id=‘l1’ and @data-title=‘11’ ]/text()") #查询id属性值为 l1 和 data-title 属性值为 11 的th标签

Python 代码

# _*_ coding : utf-8 _*_
# @Time : 2021/10/13 14:49
# @Author Lpx
# @File : lean_06
# @Project : pythonProject

#获取 站长素材的 图片

import urllib.request
import urllib.parse
import urllib.error

#访问get utf-8类型  请求通用方法
def ajaxGet(url,headers):

        request = urllib.request.Request(url=url, headers=headers)
        #代理ip 防止自己的ip被禁封访问
        proxies = {"http": "180.87.102.68:80"}
        headler = urllib.request.ProxyHandler(proxies=proxies)
        opener = urllib.request.build_opener(headler)
        responce = opener.open(request)
        context = responce.read().decode("utf-8")
        return context

ptype  = input("请输入要爬取的图片类型名称(例如:dongman;tiankongtupian;huadetupian;haidishijietupian;等):")
endpage  = input("请输入要爬取的页数:")
#素材地址
url_base="https://sc.chinaz.com/tupian/"
#模拟浏览器请求头
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.90 Safari/537.36",
}
#用于存储爬取到的 图片链接地址
list_img_href = []
for n in range(1,int(endpage)+1):
    try:
        url = ""
        if(n == 1):
            url = "https://sc.chinaz.com/tupian/"+ptype+".html"
        else:
            url = "https://sc.chinaz.com/tupian/"+ptype+"_"+str(n)+".html"

        context = ajaxGet(url,headers)
        #利用插件 获取想要数据
        from lxml import etree
        tree = etree.HTML(context)
        #获取所有图片链接地址
        list_img_href= list_img_href + tree.xpath("//div/a[@alt]/@href")
        print(list_img_href)
        print("已经爬取:"+str(len(list_img_href))+"张,图片链接地址")
    except urllib.error.HTTPError:
        print("未找到相关数据")

#遍历列表  获取每张图片下载到本地  //img[@border='0']/@src
# 定义区分图片名称 a = 0
a = 0
for n in list_img_href:
    a = a +1
    context = ajaxGet("http:"+n, headers)
    from lxml import etree
    tree = etree.HTML(context)
    # 获取所有图片链接地址
    img = tree.xpath("//img[@border='0']/@src")
    print("http:"+img[0])
    urllib.request.urlretrieve(url="http:"+img[0],filename="D:/sucai/"+ptype+str(a)+".jpg")


本文仅供学习使用!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Heart&Fire

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值