欢迎评论
目标网站:狗图片_狗图片大全_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)
|