python爬图片(绅士进来)

系统 1599 0

如果,不是因为图片,又怎会和各位绅士见面?

环境:

系统: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()



            
          

然后运行一把,美女图片尽收眼底哈。。


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论