Python入门到精通-【Python】爬虫实战,零基础初试爬虫下载图片(附源码和分析过程)
小职 2021-07-27 来源 :「攻城狮白玉」 阅读 524 评论 0

摘要:本文主要介绍Python入门到精通-【Python】爬虫实战,零基础初试爬虫下载图片(附源码和分析过程),通过具体的内容向大家展现,希望对大家Python程序开发的学习有所帮助。

本文主要介绍Python入门到精通-【Python】爬虫实战,零基础初试爬虫下载图片(附源码和分析过程),通过具体的内容向大家展现,希望对大家Python程序开发的学习有所帮助。

Python入门到精通-【Python】爬虫实战,零基础初试爬虫下载图片(附源码和分析过程)

前言

爬虫,全称网络爬虫,就是通过技术手段从网络获取数据的程序或者脚本


人生苦短,我选python。本次就用python来进行实现对一个壁纸网站的图片下载


本篇文章就是直接爬虫实战。通过本文,带你了解requests库的基本使用,并且完成壁纸网站的图片爬取


声明:博主攻城狮白玉的本篇博文只用于对于爬虫技术的学习交流。如果侵犯到相关网站利益,请联系我删除博文。造成不便还请见谅。希望各位同学在学习的时候不要过于频繁的去请求。


一、requests库介绍

Requests库是python一个很好用的http请求库。封装得很好~在我们爬虫的时候常常也会用到。


Requests的官方介绍说到,让HTTP服务人类。有一说一,这是个非常容易使用的库。本次咱们的爬虫也会用到这个库。


关于requests库的介绍,可以看一下官方文档


Requests: 让 HTTP 服务人类 - Requests 2.18.1 文档


使用前记得安装requests库


pip install requests


二、网站分析

进入目标网站

Python入门到精通-【Python】爬虫实战,零基础初试爬虫下载图片(附源码和分析过程)



随便点开一张图,查看它的url,//www.netbian.com/desk/23744.htm


先留意一下这个网址,后面会用到

Python入门到精通-【Python】爬虫实战,零基础初试爬虫下载图片(附源码和分析过程)



 回到浏览器,打开F12,通过目标元素检查工具,点击刚刚我们点过的图片。通过它的元素我们可以知道a标签里的属性值href的链接就是上面我们访问图片的链接地址


Python入门到精通-【Python】爬虫实战,零基础初试爬虫下载图片(附源码和分析过程)


我们在大图的页面,同样用f12点击一下,找到图片的链接地址

Python入门到精通-【Python】爬虫实战,零基础初试爬虫下载图片(附源码和分析过程)



访问图片链接发现是咱们要的大图。至此,对于网站的分析完毕。

Python入门到精通-【Python】爬虫实战,零基础初试爬虫下载图片(附源码和分析过程)



三、任务分析

综上所述,咱们目标网站是一个壁纸图片网站,编程做到的步骤如下:


访问首页

定位到每个图片的详情链接

访问详情链接

定位到图片对应的大图链接。下载,保存图片

看起来是不是很容易,开干


四、编程实现

4.1 访问首页

import requests

url = '//www.netbian.com/meinv/'

resp = requests.get(url)

resp.encoding = 'gbk'

#

with open('index.html', 'wb') as f:

    f.write(resp.content)

通过requests库发起get请求,请求壁纸网站的首页。并把结果保存在index.html文件里面


打开保存的文件一看,我们把首页给下载下来了。

Python入门到精通-【Python】爬虫实战,零基础初试爬虫下载图片(附源码和分析过程)



4.2 定位元素

这里我们通过xpath方式。这里用到的是lxml库。不懂lxml库的话,参考下文


【Python】爬虫解析利器Xpath,由浅入深快速掌握(附源码例子)


PS:谷歌渲染的页面的xpath和requests请求回来的xpath会有不一样。有时需要保存下来进行xpath分析


对于元素进行定位。把a标签的href值全部拿出来,而且也把对应的名称取出来

Python入门到精通-【Python】爬虫实战,零基础初试爬虫下载图片(附源码和分析过程)



tree = etree.HTML(resp.content)

 

node_list = tree.xpath('/html/body/div[2]/div[2]/div[3]/ul/li')

 

sub_url_list = []

for node in node_list:

    if len(node.xpath('./a/@href')) > 0:

        sub_url = node.xpath('./a/@href')[0]

    if len(node.xpath('./a/@href')) > 0:

        title = node.xpath('./a/b/text()')[0]

        sub_url_list.append((sub_url, title))

4.3 访问详情页

base_url = '//www.netbian.com/'

for sub_url, title in sub_url_list:

    s_page = base_url + sub_url

    s_resp = requests.get(s_page)

    with open('s.html', 'wb') as f:

        f.write(s_resp.content)

4.4 定位图片链接并下载

img = s_tree.xpath('/html/body/div[2]/div[2]/div[3]/div/p/a/img/@src')[0]

suffix = img.split('.')[-1]

img_content = requests.get(img).content

with open(f'./image/{title}.{suffix}', 'wb') as f:

    f.write(img_content)

    f.close()

下载完效果图

Python入门到精通-【Python】爬虫实战,零基础初试爬虫下载图片(附源码和分析过程)



4.5 完整源码

import requests

from lxml import etree

import time

 

'''

目标网站是一个图片网站

1.访问首页

2.定位到每个图片的下载链接

3.定位到每个图片对应的大图链接

4.下载,保存图片

'''

 

if __name__ == '__main__':

    t1 = time.time()

    url = '//www.netbian.com/meinv/'

    resp = requests.get(url)

    resp.encoding = 'gbk'

    with open('index.html', 'wb') as f:

        f.write(resp.content)

    tree = etree.HTML(resp.content)

 

    node_list = tree.xpath('/html/body/div[2]/div[2]/div[3]/ul/li')

 

    sub_url_list = []

    for node in node_list:

        if len(node.xpath('./a/@href')) > 0:

            sub_url = node.xpath('./a/@href')[0]

        if len(node.xpath('./a/@href')) > 0:

            title = node.xpath('./a/b/text()')[0]

            sub_url_list.append((sub_url, title))

    #

    base_url = '//www.netbian.com/'

    for sub_url, title in sub_url_list:

        s_page = base_url + sub_url

        s_resp = requests.get(s_page)

        s_tree = etree.HTML(s_resp.content)

        img = s_tree.xpath('/html/body/div[2]/div[2]/div[3]/div/p/a/img/@src')[0]

        suffix = img.split('.')[-1]

        img_content = requests.get(img).content

        with open(f'./image/{title}.{suffix}', 'wb') as f:

            f.write(img_content)

            f.close()

    t2 = time.time()

    print(t2-t1)


我是小职,记得找我

✅ 解锁高薪工作

✅ 免费获取基础课程·答疑解惑·职业测评

Python入门到精通-【Python】爬虫实战,零基础初试爬虫下载图片(附源码和分析过程)


本文由 @小职 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程