入门级别
需要用到 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")
本文仅供学习使用!