【Python】爬虫实战,零基础初试爬虫下载图片(附源码和分析过程)「建议收藏」

【Python】爬虫实战,零基础初试爬虫下载图片(附源码和分析过程)「建议收藏」从零到一,实战带你爬虫抓取壁纸网站的图片。学习一门技术的最快方式就是通过实战。本文带你一步一步解析一个图片网站。

大家好,又见面了,我是你们的朋友全栈君。

前言

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

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

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

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

一、requests库介绍

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

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

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

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

使用前记得安装requests库

pip install requests

二、网站分析

进入目标网站

【Python】爬虫实战,零基础初试爬虫下载图片(附源码和分析过程)「建议收藏」

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

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

【Python】爬虫实战,零基础初试爬虫下载图片(附源码和分析过程)「建议收藏」

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

【Python】爬虫实战,零基础初试爬虫下载图片(附源码和分析过程)「建议收藏」

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

【Python】爬虫实战,零基础初试爬虫下载图片(附源码和分析过程)「建议收藏」

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

【Python】爬虫实战,零基础初试爬虫下载图片(附源码和分析过程)「建议收藏」

三、任务分析

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

  1. 访问首页
  2. 定位到每个图片的详情链接
  3. 访问详情链接
  4. 定位到图片对应的大图链接。下载,保存图片

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

四、编程实现

4.1 访问首页

import requests
url = 'http://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】爬虫实战,零基础初试爬虫下载图片(附源码和分析过程)「建议收藏」

4.2 定位元素

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

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

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

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

【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 = 'http://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】爬虫实战,零基础初试爬虫下载图片(附源码和分析过程)「建议收藏」

4.5 完整源码

import requests
from lxml import etree
import time

'''
目标网站是一个图片网站
1.访问首页
2.定位到每个图片的下载链接
3.定位到每个图片对应的大图链接
4.下载,保存图片
'''

if __name__ == '__main__':
    t1 = time.time()
    url = 'http://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 = 'http://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)

总结

妈妈再也不用担心我的学习了。

写在后面

如果觉得有用的话,麻烦一键三连支持一下攻城狮白玉并把本文分享给更多的小伙伴。你的简单支持,我的无限创作动力

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/150204.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • epoch和batchsize设置多大(BatchDataset)

    梯度下降  这是一个在机器学习中用于寻找最佳结果(曲线的最小值)的迭代优化算法。  梯度的含义是斜率或者斜坡的倾斜度。  下降的含义是代价函数的下降。  算法是迭代的,意思是需要多次使用算法获取结果,以得到最优化结果。在数据很庞大的时候(在机器学习中,几乎任何时候都是),我们才需要使用epochs,batchsize,迭代这些术语,在这种情况下,一次性将数据输入计算机是不可能的…

    2022年4月15日
    551
  • 数据库 分区表详解

    数据库 分区表详解如果你的数据库中某一个表中的数据满足以下几个条件,那么你就要考虑创建分区表了。1、数据库中某个表中的数据很多。很多是什么概念?一万条?两万条?还是十万条、一百万条?这个,我觉得是仁者见仁、智者见智的问题。当然数据表中的数据多到查询时明显感觉到数据很慢了,那么,你就可以考虑使用分区表了。如果非要我说一个数值的话,我认为是100万条。2、但是,数据多了并不是创建分区表的惟一条件,哪怕你有一千万条记录,但

    2022年6月6日
    40
  • 不管怎么选择,都会有遗憾「建议收藏」

    到底什么样的选择才是最好的,每一种选择都会有遗憾!最近有点想家,虽然在这个城市安了新家。那个小的城市–延安,和这个大的城市—长沙,两种感觉,不同的生活体验。现在都十一月了,要是在延安,那么现在已经是深秋,开始变得萧条,不想夏天那么生机盎然,而现在这个城市秋天和夏天在外观上看不出什么变化,只是现在的温度比夏天舒服了很多,不冷 不热。城市的车水马龙,霓虹灯,夜晚还是有很多的喧嚣,也看不到漫天的繁星。

    2022年2月26日
    45
  • Android中Broadcast Receiver组件具体解释

    Android中Broadcast Receiver组件具体解释

    2021年12月15日
    56
  • 获得Bert预训练好的中文词向量

    获得Bert预训练好的中文词向量安装肖涵博士的bert-as-service:pipinstallbert-serving-serverpipinstallbert-serving-client下载训练好的Bert中文词向量:https://storage.proxy.ustclug.org/bert_models/2018_11_03/chinese_L-12_H-768_A-12.zip启动bert-as-s…

    2022年5月11日
    43
  • 手机怎么模拟125k卡_手把手教你用手机NFC秒变门禁卡,这个方法多种手机都可以适用…

    手机怎么模拟125k卡_手把手教你用手机NFC秒变门禁卡,这个方法多种手机都可以适用…现在只要手机支持NFC功能,手机秒变公交卡、移动支付、数据传输、门禁卡等功能,之前在评论看多好多人说不知道怎么复制门禁卡,今天就来和大家讲解下如何复制门禁卡。我们以华为手机,前提是手机支持NFC功能的。第一步:门禁卡功能在钱包里面,所以首先找到华为钱包并打开,登录你的华为账号,在主页找到【门钥匙】。第二步:点击进入【门钥匙】后,点击【添加】,开始【模拟】门卡第三步:根据提示,将门卡放到手机背面NF…

    2022年5月24日
    418

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号