如果,不是因为图片,又怎会和各位绅士见面?
环境:
系统:win10
ide:pycharm
模块:requests, etree
首先我们选一个有很多妹子图片的网站,我提供一个:https://www.mzitu.com/jiepai/
下面我们开始:
1.分析网页结构:
打开网页,按F12打开调试,然后选中一个图片,看它的结构:
有一个data-original属性。属性值就是图片的链接,并且这个标签的class是“lazy”,我们可以用etree找到这个节点,拿到图片的地址,然后下载保存到本地。
初始参数:
header是发起请求时,告诉服务器浏览器的信息
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36",
"Referer": "https://www.mzitu.com/jiepai/comment-page-1/",
}
name = 0
japan_url_first = "https://www.mzitu.com/japan/" #第一页
japan_url_other = "https://www.mzitu.com/japan/page/{}/" #非第一页
第一页的网址是https://www.mzitu.com/japan/,我们先爬取这个页面的图片,分为两个步骤:
①:将网页上的所有class=“lazy”的标签的data-original属性找出来,也就是把页面上所有的图片地址以一个数组返回
#获取图片链接
def get_url(html_url): # 获取图片链接,并返回
html = requests.get(html_url,headers = header).text #获取网页代码
etree_html = etree.HTML(html)
img_url = etree_html.xpath('//img[@class="lazy"]/@data-original')
return img_url
②:遍历图片地址数组,下载图片
img_list = get_url(url)
for img in img_list:
print("正在此地址{}的图片".format(img))
get_img(img)
#下载图片
def get_img(url): #下载图片保存到指定文件夹
global name
name += 1
img_name = "D:\\pythonFetch\\imgs\\{}.jpg".format(name)
img = requests.get(url, headers = header).content
with open(img_name, 'wb') as save_img: # python自动帮我们调用save_img.close
save_img.write(img)
img_name:为图片保存的地址
但是这只是一个页面的图片,能不能一次爬取签10页,前100页的图片呢? 可以:
我们发现第一页的网址:https://www.mzitu.com/japan/
第二页的网址:https://www.mzitu.com/japan/page/2/
第三页:https://www.mzitu.com/japan/page/3/
第n页:https://www.mzitu.com/japan/page/n/
可以看出来除了第一页,其余都是有规律的,那么好说:
#主函数
def main(): # 使用for循环爬取所有网页
for n in range(1,24):
if n == 1:
page_url = japan_url_first
else:
page_url = japan_url_other.format(n)
print("正在爬取第{}页".format(n))
html = get_html(page_url)
img_list = get_url(html)
for img in img_list:
print("正在此地址{}的图片".format(img))
get_img(img)
main()
完整代码:
'''
设置浏览器头部
User-Agent表示浏览器的参数信息
Referer用于设置使用哪个网页跳转过来
url设置网址模板,可以通过.format参数补充网址
'''
from lxml import etree
import requests
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36",
"Referer": "https://www.mzitu.com/jiepai/comment-page-1/",
}
name = 0
japan_url_first = "https://www.mzitu.com/japan/" #第一页
japan_url_other = "https://www.mzitu.com/japan/page/{}/" #非第一页
#下载网页
def get_html(url): #获取网页代码,并以值的形式弹出
html = requests.get(url,headers = header).text
return html
#下载图片
def get_img(url): #下载图片保存到指定文件夹
global name
name += 1
img_name = "D:\\pythonFetch\\imgs\\{}.jpg".format(name)
img = requests.get(url, headers = header).content
with open(img_name, 'wb') as save_img: # python自动帮我们调用save_img.close
save_img.write(img)
#获取图片链接
def get_url(html): # 获取图片链接,并返回
etree_html = etree.HTML(html)
img_url = etree_html.xpath('//img[@class="lazy"]/@data-original')
return img_url
#主函数
def main(): # 使用for循环爬取所有网页
for n in range(1,24):
if n == 1:
page_url = japan_url_first
else:
page_url = japan_url_other.format(n)
print("正在爬取第{}页".format(n))
html = get_html(page_url)
img_list = get_url(html)
for img in img_list:
print("正在此地址{}的图片".format(img))
get_img(img)
main()
然后运行一把,美女图片尽收眼底哈。。