my canteen
登录       注册

您现在的位置是:网站首页 > 学无止境

每日一技之爬取站长素材图片

王伟2020年4月14日140人围观
简介利用xpath和requests爬取图片

爬取站长素材图片

爬取图片同爬取小说相差无几

url = http://sc.chinaz.com/tupian/

身为一个爬手你应该做到打开网页就是检查

通过代码可以看出和我们爬取小说基本一模一样

import requests
import lxml
import os 
# 如果学习了xpath语法这里就要派上用场了
from lxml import etree
dirname = "站长素材花图片"
if not os.path.exists(dirname):
    os.mkdir(dirname)
headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.36"
}
main_url = "http://sc.chinaz.com/tupian/huadetupian.html"
response  = requests.get(url=main_url, headers=headers)
response.encoding = "utf-8"
page_text = response.text
# 然后声明了一段HTML文本,调用HTML类进行初始化,这样就成功构造了一个XPath解析对象。
# etree.HTML模块可以帮助我们自动的修正HTML文本。
tree = etree.HTML(page_text)
# xpath语法
a_list = tree.xpath("//div[@id='container']/div/div/a")
for a in a_list:
    src = a.xpath("./@href")[0]
    resopnse = requests.get(url=src,headers=headers)
    resopnse.encoding = "utf-8"
    detail_text = resopnse.text
    tree = etree.HTML(detail_text)
    img_url = tree.xpath("//div[@class='imga']/a/@href")[0]
    img_alt = tree.xpath("//div[@class='imga']/a/@title")[0]+'.jpg'
    pic = requests.get(url=img_url, headers=headers).content
    with open(dirname+'/'+img_alt,"wb",) as fp:
        fp.write(pic)
        fp.close()
        print(img_alt+"下载成功")

这样我们就很轻松的拿到了图片

但值得注意的是我们这里爬取是大图,所以也是巧妙的躲避了他的坑,如果我们爬取封面上的图片,最后会发现通过xpath定位到的地址是一个空列表。但是为什么会出现这种情况呢?这也就涉及到了一种用户体验,也可以说是一种反爬机制,html的懒加载,究竟什么是懒加载呢?

我们直接上图,相信大家很容易就明白了

通过这两张图就可以看出,src2是伪装的属性,只有图片出现在可视界面的地方,src属性才会出现

如果我想要获取图片,必须通过伪装的属性进行分析,这里是src2,当然也可以是别的名字

这就是我们有时很是困惑为什么代码明明写的很漂亮,但是竹篮打水一场空的原因了

路漫漫其修远兮,吾将上下而求索。


文章评论

来说句话吧.... 共有评论数:0条


微信二维码 博主微信 qq二维码 博主QQ
177****8743
7*24小时电话