参考文章:https://www.cnblogs.com/franklv/p/6829387.html

今天想给我的电脑里面多加点壁纸,但是嫌弃一个个保存太慢,于是想着写个爬虫直接批量爬取,因为爬虫只是很久之前学过一些,很多基础语句都不记得了,于是直接在网上找了个有基础操作语句的爬虫代码,在这上面进行修改以适应我的要求和爬取的网页需求

我爬取的网页如下:
彼岸桌面网唯美图片:http://www.netbian.com/weimei/index.htm

注意:这次爬取的网页的图片是静态的,没有爬取js,而且之前爬虫就学了一点也没很深入,所以代码写的很丑,而且因为写这个主要是为了给电脑爬个壁纸,所以侧重功能,一些地方能简单解决的就简单解决了,在此建议想好好学习爬虫的还是多多钻研,不要取巧

下面代码来自上面的参考文章:

import requests
from bs4 import BeautifulSoup
import osdef getHtmlurl(url):         #获取网址try:r=requests.get(url)r.raise_for_status()r.encoding=r.apparent_encodingreturn r.textexcept:return ""def getpic(html): #获取图片地址并下载soup =BeautifulSoup(html,'html.parser')all_img=soup.find('ul',class_='pli')find_all('img')for img in all_img:src=img['src']img_url=srcprint (img_url)root='D:/pic/'path = root + img_url.split('/')[-1]try:                              #创建或判断路径图片是否存在并下载if not os.path.exists(root):os.mkdir(root)if not os.path.exists(path):r = requests.get(img_url)with open(path, 'wb') as f:f.write(r.content)f.close()print("文件保存成功")else:print("文件已存在")except:print("爬取失败")def main():url='http://www.ivsky.com/bizhi/yourname_v39947/'html=(getHtmlurl(url))print(getpic(html))
main()

这上面的代码中有基本的网页信息获取,图片下载操作,我们主要工作就是依据网页源代码信息以及自己的个人要求编写爬取网页图片的代码。

首先点开网站,按F12观察源码信息:

定位页面中一个图片,可以看到它的在网页源码中的位置,然后我们往上面拉,看它的的路径:

需要注意一点,这个网页中每页图片中都有个我们并不需要的:

它点开之后是另一个展示一组图片的页面,所以我们要排除它的干扰:

soup =BeautifulSoup(html,'html.parser')
all_img=soup.find('div',class_='list').find('ul').find_all("a",attrs={'href':re.compile('^((?!http).)*$'),'target':'_blank'})

这里用了BeautifulSoup库,通过find_all()方法的标签属性筛选。我们对比上面两种图片链接源码的不同,可以看到我们需要的图片的a标签的href属性的值里面是没有http的,但是干扰图片中有,所以我们用一个正则来筛选href标签值中不含有http的并且target属性的值为_blank的a标签,得到的是这一页中包含我们需要链接的所有a标签信息的列表。不知道你有没有注意到,img标签中的链接看上去才是能满足我们需求的,而a标签中的链接信息还不完整,我们为什么要提取它后面会说到

用for语句提取每一条信息:

for img in all_img:title=img['title']if title.find(u"女") != -1:print("不符合要求,跳过")continue

上面是提取每个图片的名字,并对其进行筛选。因为我并不想要人物图片,经过观察,发现大多人物图片名称都包含“女”字,于是以此来进行筛选。这里可以用正则表达式,能进行更多样更细致的筛选。另外,这段语句我是放在整个循环的最前面,但是按照代码的逻辑性以及美观性是不应该放在这里的,具体原因我后面会说到。
这里回顾之前我们为什么要提取一个非图片下载链接的问题,原因就是别忘了我们是要把图片下载下来作为壁纸使用的,这就对图片的分辨率有要求。我们把鼠标放在图片对应的href上,显示的分辨率是很低的。这就是网页展示高分辨率图片使用的一种方法,套图,以此使页面浏览更快速更省流,我们为了爬取更高分辨率的图片,还需后面的操作。
我们点击此图片,会出来一个新页面,页面的链接如下:

仔细观察,会发现新的链接就是在网站链接之后加上了我们之前在a标签的href属性中提取的值
然后看页面源码,定位图片:

然而现在我们依旧不可以直接获取下载链接。我们可以看到a标签的href属性的值类似于我们在之前页面看到的值,说明后面还有更大分辨率的图片,现在图片的分辨率虽然说勉强能用,但是既然要爬,我们干脆就爬个分辨率最大的。于是和之前一样,再次点击新图片,又出来一个新的页面,链接图片我就不放了,依然和之前一样是网站链接加上href中的值。
我们这时候定位新页面上的图片源码:

好啦,现在我们就可以直接获取图片a标签中的链接信息进行下载了。
我们之前的两次跳转大致操作是类似的,我们可以将这些语句写入到新方法中:

def getimgurl(img):href=img['href']url="http://www.netbian.com"+href#print(url)htm=getHtmlurl(url)soup=BeautifulSoup(htm,'html.parser')return soup

注意两次对页面信息处理后的soup信息中图片链接提取的操作是不同的,这个要写在新方法外面:

soup1=getimgurl(img)
im1=soup1.find('div',id='main').find('div',class_='endpage').find('div',class_='pic').find('p').find('a')
soup2=getimgurl(im1)
im2=soup2.find('div',id='main').find('table').find('a')

提取链接:

       img_url = im2['href']print (img_url)

这里就是我们最终的链接,输出链接,便于之后的对于各个图片爬取状态的定位。然后回想开头那次按图片名称进行的筛选,我当时说放在里对代码的逻辑性和美观性有影响就是这个。按理说应该要输出每个图片的链接之后,在输出对应的爬取状态,但是因为爬取图片链接我们需要多次处理,这个需要时间,如果将筛选放在爬取链接之后,会很浪费时间,大家可以尝试一下两者在爬取多个图片的时间差距,因为我重点主要放在代码的功能而不是代码本身,所以我将筛选放在了最前面,筛选不通过这个图片直接跳过,节省时间。
单纯为了学习的,如果有筛选信息,可以放在链接之后,这样输出信息会看的很舒服。如果觉得时间太长,可以考虑多线程爬取。
然后就是自定义图片名字和路径。图片名字我们之前已经提取出来保存在title里面,网页上的图片有些名字中有空格,有些有逗号,我觉得这样看起来不太舒服,就将空格和逗号都替换掉了:

       root='/home/suwex/test2/'title=title.replace(',','|')title=title.replace(' ','|')path = root + title

之后图片的下载操作就是如参考代码一样。
这一切结束之后,可以发现我们只爬取了一页图片,这当然不是我们所需要的。

前方取巧警告!

回去观察最开始的网页的跳转页数后的链接信息变化,发现只需要在页面链接的index_后面加上对应的数字就行了,于是,我们在主函数中加上一个循环,循环键入链接信息:

for i in range(1,10):if i==1:url='http://www.netbian.com/weimei/index.htm'else:url='http://www.netbian.com/weimei/index_' + str(i) +'.htm'html=(getHtmlurl(url))print(str(i)+" : ")print(getpic(html))

if判断是因为第一页的index后面没有数字,所以要单独拿出来操作一下。输出i值,是为了让输出信息更为明晰,也便于在爬取失败后找到对应图片查找失败原因。

这种页面跳转方式我是非常不推荐大家使用的,一般写爬虫的时候我们需要的是自动跳转,自动爬取下一步的链接。一种方式就是通过定位网页中下一页按钮的源码进行跳转:

最后,一切顺利的话完成壁纸爬取,我们可能会发现在爬取过程中有图片爬取失败了,找到这个图片,我们发现这个图片的最大分辨度是需要会员才能下载的,而我们连登陆都没有。我是直接放弃掉这几个图片的,不过会员不说,这里面涉及到的登录功能也是在大部分爬虫编写过程中不可或缺的,这也是很重要的大家要好好学习钻研。
很多东西我这个简单的爬虫代码里面都没有写到,这只是个最基本的最简单的,而且写的不太规范。主要侧重在功能上了。大家编写自己的爬虫的时候可以试着把cookie信息加上,还有一些网站的登录之类的。

以上,大家看下来的话应该有点发现了,写爬虫基本的语句技巧掌握是一方面,更不可或缺的是对你想爬取的页面的源码的分析,爬虫没有通用的,每个爬虫都是对相应页面和功能的量身定制,网上的各种代码虽好但不是你需要的,学习爬虫时,语句不熟练的话,也不要像我一样直接找个模板修改,可以比照着编写,慢慢就熟练了。

最后附上完整源码:

import requests
from bs4 import BeautifulSoup
import os
import redef getHtmlurl(url):         #获取网址try:r=requests.get(url)r.raise_for_status()r.encoding=r.apparent_encodingreturn r.textexcept:return ""def getimgurl(img):href=img['href']url="http://www.netbian.com"+href#print(url)htm=getHtmlurl(url)soup=BeautifulSoup(htm,'html.parser')return soupdef getpic(html): #获取图片地址并下载soup =BeautifulSoup(html,'html.parser')all_img=soup.find('div',class_='list').find('ul').find_all("a",attrs={'href':re.compile('^((?!http).)*$'),'target':'_blank'})for img in all_img:title=img['title']if title.find(u"女") != -1 :print("不符合要求,跳过")continuesoup1=getimgurl(img)im1=soup1.find('div',id='main').find('div',class_='endpage').find('div',class_='pic').find('p').find('a')soup2=getimgurl(im1)im2=soup2.find('div',id='main').find('table').find('a')img_url = im2['href']print (img_url)#root='/home/suwex/图片/'root='/home/suwex/test2/'title=title.replace(',','|')title=title.replace(' ','|')path = root + titletry:                              #创建或判断路径图片是否存在并下载if not os.path.exists(root):os.mkdir(root)if not os.path.exists(path):r = requests.get(img_url)with open(path, 'wb') as f:f.write(r.content)f.close()print("文件保存成功")else:print("文件已存在")except:print("爬取失败")def main():for i in range(1,10):if i==1:url='http://www.netbian.com/weimei/index.htm'else:url='http://www.netbian.com/weimei/index_' + str(i) +'.htm'html=(getHtmlurl(url))print(str(i)+" : ")print(getpic(html))
main()

用python爬虫爬取网页壁纸图片(彼岸桌面网唯美图片)相关推荐

  1. python唯美壁纸_用python爬虫爬取网页壁纸图片(彼岸桌面网唯美图片)

    参考文章:https://www..com/franklv/p/6829387.html 今天想给我的电脑里面多加点壁纸,但是嫌弃一个个保存太慢,于是想着写个爬虫直接批量爬取,因为爬虫只是很久之前学过 ...

  2. python爬虫爬取网页壁纸图片(《底特律:变人》)

    参考文章:https://www.cnblogs.com/franklv/p/6829387.html 爬虫爬取网址:http://www.gamersky.com/news/201804/10396 ...

  3. Python爬虫-爬取wallhaven壁纸

    Python爬虫-爬取wallhaven壁纸 前言 可行性分析 功能介绍 效果展示 基本思路 1.获取每页(1页24张)壁纸的url 2.获取每张壁纸缩略图的url 3.获取壁纸原图下载的url 4. ...

  4. Python爬虫爬取网页数据并存储(一)

    Python爬虫爬取网页数据并存储(一) 环境搭建 爬虫基本原理 urllib库使用 requests库使用 正则表达式 一个示例 环境搭建 1.需要事先安装anaconda(或Python3.7)和 ...

  5. python爬虫爬取网页新闻标题-看完保证你会

    python爬虫爬取网页新闻标题方法 1.首先使用浏览自带的工具--检查,查找网页新闻标题对应的元素位置,这里查到的新闻标题是在 h3 标签中 2.然后使用编辑器编写python代码 2.1方法一: ...

  6. python爬虫爬取网页图片_Python爬虫:爬取网页图片

    先分析查找要爬取图片的路径 在浏览器F12 审查元素 整体实现代码 # -- coding:UTF-8 -- import requests from bs4 import BeautifulSoup ...

  7. python爬虫--爬取9某1看剧网电视剧

    文章目录 python爬虫--爬取91看剧网电视剧 爬取视频必备知识 思路 代码 合并视频 python爬虫–爬取91看剧网电视剧 爬取视频必备知识 https://www.91kanju.com/v ...

  8. 利用Python爬虫爬取网页福利图片

    最近几天,学习了爬虫算法,通过参考书籍,写下自己简单爬虫项目: 爬取某福利网站的影片海报图片 环境:anaconda3.5+spyder3.2.6 目录 1.本节目标 2.准备工作 3.抓取分析 4. ...

  9. 上手快!!福利局!新手如何使用python爬虫爬取网页图片(使用正则进行数据解析)当然这个新手是我自己

    作为一个python新入门小白,突然就想发个博客,一方面为了记录学习历程,一方面能分享给新入门的同学经验,更多的是想和大家一起学习和交流.以下是我以小白的角度分享的爬虫的相关知识和一个简单的爬取网页图 ...

最新文章

  1. 代码覆盖率原理分析:sys.settrace流程分析
  2. 读书笔记之MySQL技术内幕
  3. 根据屏幕分辨率获取css,根据判断浏览器类型屏幕分辨率自动调用不同CSS的代码...
  4. LVS负载均衡DR模式实现
  5. 亮剑吧,掏出你吃灰的单片机板子。
  6. URI 和 URL 的区别
  7. 一文了解MySQL的Buffer Pool
  8. webpack4下import()模块按需加载,打包按需切割模块,减少包体积,加快首页请求速度...
  9. Java开发支付宝支付功能
  10. Emmagee——Android性能测试工具
  11. 微信公众平台Js API实现微信分享
  12. dll控件安装方法(仅供参考)
  13. c语言一元多项式课程设计,一元多项式的计算数据结构课程设计.doc
  14. HBuilder没有显示表格边框
  15. prometheus数据采集
  16. 学术角度看区块链:数字广告行业的“他山之石”
  17. 【博客】RealSense
  18. 基于禁忌搜索算法的三维装箱问题
  19. 魔戒世界服务器维护,我的世界魔戒 The Lord of the Rings 服务器1.7.10
  20. Windows邮件服务器hMailServer,网页管理平台WEBADMIN搭建

热门文章

  1. 【新知实验室】腾讯云TRTC服务体验
  2. 使用LSTM进行预测,有一对一、多对一、多对多的预测,其中有一些疑问一起探讨(一)
  3. 10.pyecharts柱状图-----班级各地区男女所占人数
  4. C++习题--实数的输出格式
  5. 如何实现算法中的公平性
  6. 防火墙NAT综合实验——nat控制,豁免,远程,DMZ区域(带命令)
  7. eclipes 安装的常用配置
  8. 电子信息类和计算机类专业网课表
  9. 3288 android5.1 编译,【DLT-RK3288试用】8. RK3288 编译 Android 5.1 源码
  10. Android计步器的实现(1)