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

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

我爬取的网页如下:

彼岸桌面网唯美图片:http://www.netbian.com/weimei/index.htm

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

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

import requests

from bs4 import BeautifulSoup

import os

def getHtmlurl(url): #获取网址

try:

r=requests.get(url)

r.raise_for_status()

r.encoding=r.apparent_encoding

return r.text

except:

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=src

print (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 re

def getHtmlurl(url): #获取网址

try:

r=requests.get(url)

r.raise_for_status()

r.encoding=r.apparent_encoding

return r.text

except:

return ""

def getimgurl(img):

href=img['href']

url="http://www.netbian.com"+href

#print(url)

htm=getHtmlurl(url)

soup=BeautifulSoup(htm,'html.parser')

return soup

def 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("不符合要求,跳过")

continue

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)

#root='/home/suwex/图片/'

root='/home/suwex/test2/'

title=title.replace(',','|')

title=title.replace(' ','|')

path = root + title

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

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唯美壁纸_用python爬虫爬取网页壁纸图片(彼岸桌面网唯美图片)相关推荐

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

    参考文章:https://www.cnblogs.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桌面爬虫_Python3爬虫爬取英雄联盟高清桌面壁纸功能示例【基于Scrapy框架】...

    本文实例讲述了Python3爬虫爬取英雄联盟高清桌面壁纸功能.分享给大家供大家参考,具体如下: 使用Scrapy爬虫抓取英雄联盟高清桌面壁纸 源码地址:https://github.com/snowy ...

  5. python java 爬数据_如何用java爬虫爬取网页上的数据

    当我们使用浏览器处理网页的时候,有时候是不需要浏览的,例如使用PhantomJS适用于无头浏览器,进行爬取网页数据操作.最近在进行java爬虫学习的小伙伴们有没有想过如何爬取js生成的网络页面吗?别急 ...

  6. Python 爬取网页信息并保存到本地爬虫爬取网页第一步【简单易懂,注释超级全,代码可以直接运行】

    Python 爬取网页信息并保存到本地[简单易懂,代码可以直接运行] 功能:给出一个关键词,根据关键词爬取程序,这是爬虫爬取网页的第一步 步骤: 1.确定url 2.确定请求头 3.发送请求 4.写入 ...

  7. python爬虫获取的网页数据为什么要加[0-python3爬虫爬取网页思路及常见问题(原创)...

    学习爬虫有一段时间了,对遇到的一些问题进行一下总结. 爬虫流程可大致分为:请求网页(request),获取响应(response),解析(parse),保存(save). 下面分别说下这几个过程中可以 ...

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

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

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

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

最新文章

  1. 云时代架构--阅读笔记03
  2. 大数据和人工智能的关系,超全解析
  3. 第十七篇 计算机组成原理
  4. Servlet上传文件和下载文件示例
  5. AIDL Service,跨进程调用Services
  6. 中国联通官网被发现含木马脚本,可向用户推广色情APP
  7. C++基础——bitset与vectorbool
  8. WPS Excel快捷键
  9. RSA算法详解及手算过程
  10. python实现 数值 转换为 万,亿单位,保留3位小数(例:18000转换为1.8万)
  11. 加拿大-渥太华大学-轴承数据-不同转速
  12. 手机电视机屏幕分辨率
  13. epub格式电子书剖析之三:NC…
  14. Python https携带证书
  15. CSAPP--BombLab
  16. oracle 全文索引 优化,通过案例学调优之--Oracle 全文索引
  17. 运筹学那些事,专科学生学习运筹学之模拟,No.10
  18. VTK:频率处理——高通滤波(理想)
  19. 中级软考-软件设计师(二)
  20. 用户名和计算机名命名规范

热门文章

  1. 【机器学习】支持向量机中的核函数(理论+图解+公式推导)
  2. 在计算机里无法打开光盘,电脑光驱打不开怎么办 别担心方法在这里
  3. 层次聚类及谱系图 介绍及python实现
  4. Mybatis中include标签的使用
  5. 广东专插本计算机专业学校有哪些,广东专插本A类学校有哪些专业可以报
  6. 汽车零部件行业mes系统具体功能介绍
  7. python爬取双色球数据+数据统计
  8. IEC104模拟终端
  9. 【pandas】使用技巧之一
  10. 上节Pandas学会了吗?那我可教你进阶啦~