栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python爬虫静态网站——图片及保存

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python爬虫静态网站——图片及保存

欢迎评论

目标网站:狗图片_狗图片大全_4342张 (天堂图片网)

静态网站

引用库:

import requests #发送请求的
import os #拼接保存文件目录的
from lxml import etree #解析的
from fake_useragent import UserAgent #随机生成user的
import time #不重要自己计时玩的

请求头:

headers = {
    'cookie': 'BAIDU_SSP_lcr=https://www.baidu.com/link?url=ccJ__wOLSIQlB_WtJGI7P3zEmVN-8ZXfDmvnGO5Bh0-Y2pOj8zGXWxb0FzBbZ5QI&wd=&eqid=ea2fb6e2000673510000000361986f47; __yjs_duid=1_1de99d164448e2a51fb1781927e86dad1637379923384; statistics_clientid=me; Hm_lvt_862071acf8e9faf43a13fd4ea795ff8c=1637379924,1637380093; Hm_lvt_a951b469f6e313457f2934c362ed30de=1637380661; Hm_lpvt_a951b469f6e313457f2934c362ed30de=1637380877; Hm_lpvt_c13cf8e9faf62071ac13fd4eafaf1acf=1637381219; Hm_lpvt_862071acf8e9faf43a13fd4ea795ff8c=1637381220',
    'referer': 'Referer: https://www.ivsky.com/tupian/gou_t116/',
    'user-agent':UserAgent().random
}
#不设置请求头,有些基本访问是访问不了的,只是简单的设置

解析网页: 

url = 'https://www.ivsky.com/tupian/gou_t116/'
#要申请的url

url_header = 'https://www.ivsky.com'
#发现这个网页请求下来的url和实际的url缺少前面这一部分
#提前设置,做个拼接

resp = requests.get(url,headers)
#发送请求

html = etree.HTML(resp.text)
#做个解析,以上基本是固定格式,没有原因,语法就是这样的

定位元素:

img_list = html.xpath('/html/body/div[3]/div[2]/ul/li')
#定位到每个图的li标签,因为咱们要的是每一张图
for img in img_list:
    img_net_href = img.xpath('./div/a/@href')[0]
    img_href = url_header+img_net_href
#for循环得到每张图的href属性,再拼接上面的url_header
#得到可以查到图片真实地址的url

#起始网站中图片都是小图,不是我们要下载的
#所以要得到图片的大图链接
#真实电脑需要鼠标点一下图
#跳转到一个新的页面
#需要获得这个页面的url提供给python操作,解析拼接如上

查找jpg实际地址:

respo = requests.get(img_href)
#得到图片的url
img_html = etree.HTML(respo.text)
#解析
title = img_html.xpath('//*[@id="al_tit"]/h1/text()')[0]
img_url = 'http:'+img_html.xpath('//*[@id="imgis"]/@src')[0]
#定位元素获得title文字和图片真实地址的url
#xpath定位得到的都是列表,所以后面加个[0]

保存图片:

res = requests.get(img_url)
#给图片实际地址发送请求
with open(os.path.join('./图片',f'{title}.jpg'),'wb')as fp:
    fp.write(res.content)
#with open()as fp:来保存文件
#我在这个爬虫文件的同目录下创建了一个名叫图片的文件夹
#我们需要把图片保存进去
#用到了os模块拼接
#os.path.join('./图片',f'{title}.jpg')
#得到的结果就是图片文件夹下的名字为刚才获取到的title的.jpg文件
#wb是以二级制写入文件
#res.content是请求回来的二进制内容

完整代码:

import requests
import os
from lxml import etree
from fake_useragent import UserAgent
import time

time1 = time.time()


headers = {
    'cookie': 'BAIDU_SSP_lcr=https://www.baidu.com/link?url=ccJ__wOLSIQlB_WtJGI7P3zEmVN-8ZXfDmvnGO5Bh0-Y2pOj8zGXWxb0FzBbZ5QI&wd=&eqid=ea2fb6e2000673510000000361986f47; __yjs_duid=1_1de99d164448e2a51fb1781927e86dad1637379923384; statistics_clientid=me; Hm_lvt_862071acf8e9faf43a13fd4ea795ff8c=1637379924,1637380093; Hm_lvt_a951b469f6e313457f2934c362ed30de=1637380661; Hm_lpvt_a951b469f6e313457f2934c362ed30de=1637380877; Hm_lpvt_c13cf8e9faf62071ac13fd4eafaf1acf=1637381219; Hm_lpvt_862071acf8e9faf43a13fd4ea795ff8c=1637381220',
    'referer': 'Referer: https://www.ivsky.com/tupian/gou_t116/',
    'user-agent':UserAgent().random
}
url = 'https://www.ivsky.com/tupian/gou_t116/'
url_header = 'https://www.ivsky.com'
resp = requests.get(url,headers)
html = etree.HTML(resp.text)
img_list = html.xpath('/html/body/div[3]/div[2]/ul/li')
for img in img_list:
    img_net_href = img.xpath('./div/a/@href')[0]
    img_href = url_header+img_net_href
    respo = requests.get(img_href)
    img_html = etree.HTML(respo.text)
    title = img_html.xpath('//*[@id="al_tit"]/h1/text()')[0]
    img_url = 'http:'+img_html.xpath('//*[@id="imgis"]/@src')[0]
    res = requests.get(img_url)
    with open(os.path.join('./图片',f'{title}.jpg'),'wb')as fp:
        fp.write(res.content)

time2 = time.time()
time = time2 - time1
print(time)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/581012.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号