哈哈,这是我第一篇博客

半年以后回来再看发现这代码简直太难看了

现在已经弃用大小驼峰转蛇形命名了

确实好看

除了命名别的也写的不怎么样

因为爬虫只是个爱好所以也不准备再投入时间重构了

将就着看吧

1.主要的库:

1.requests

2.Pillow

请自行安装

2.目标网址:

http://pic.netbian.com/

声明:此网址是随便找的,代码仅供技术交流使用,如有侵权请联系本人删除

3.思路

如何得到每张图片的具体位置呢?

首先找到在哪一个分页

打开页面,F12查看源码,我的浏览器是Firefox

然后鼠标移到分页的2上,右键查看元素,可以看到

这就是每个分页的部分URL,验证一下,浏览器中输入 pic.netbian.com/index_5.html ,自动跳转到彼岸图网第五分页

首页是index.html,分页的部分URL格式为index_[0-9]*.html

然后在分页中找以缩略图形式显示在页面上的子页面URL

上图中为/tupian/24556.html

如果只需要低像素的缩略图的话,现在就可以开始爬了,上图中缩略图图片的部分URL格式为/uploads/allimg/.*a.jpg

注意区分这两个概念

如果需要大图,那么就要在/tupian/24556.html下继续去找大图的具体位置。点开缩略图,右击大图,查看元素,找到格式为/uploads/allimg/.*be.jpg的代码,就是这张大图的URL了。

当然不是所有的大图都是xxxbe.jpg格式的,所以不能用正则匹配be.jpg$的格式去处理,查看子页面中大图代码的位置,都是第一个出现的,其余的都是推荐的相似图片的URL,为了防止重复爬取缩略图图片,可以用正则^/uploads/allimg/.*.jpg去匹配,只要找到一个就break,然后分析下一个子页面的html代码。

如下,在点开缩略图后还有相似图片推荐,为了不重复抓取,会在代码中作处理

4.代码

要写爬虫首先要对Web有一定的了解,要是连查看源码都不会就更别说分析了,所以还是先好好学学Web再去写爬虫,不说会做网页,最起码要能看懂个大概。按我的理解,爬虫实际上就是模拟了浏览器的行为,所以在代码中把上述的步骤实现了就ok

#coding:gbk

'''

Author: CSDN wuming7847

转载请注明出处

'''

import requests

from PIL import Image

from io import BytesIO

import re

from requests.exceptions import HTTPError

root="http://pic.netbian.com/index_%d.html"

#除首页外所有分页的统一格式

uni="http://pic.netbian.com"

#子页面和大图的URL前缀

AllPage=[]

#要爬取的分页URL

AllImgHTML=[]

#缩略图代表的子页面的部分URL,格式为/tupian/.*.html

AllImgURL=[]

#每张大图的部分URL,格式为/uploads/allimg/.*.jpg

def GetPageURL(root,Start,counts):

#得到每个分页的URL放到AllPage中

if Start==1:

AllPage.append("http://pic.netbian.com/index.html")

#将非标准格式的首页URL放入

for i in range (Start+1,Start+counts):

newURL=root.replace("%d", str(i))

AllPage.append(newURL)

else:

for i in range (Start,Start+counts):

newURL=root.replace("%d", str(i))

AllPage.append(newURL)

def GetImgHTML(AllPage):

#得到每个分页中子页面的URL放到AllImgHTML中

for PageURL in AllPage:

try:

res=requests.get(PageURL)

res.raise_for_status()

except HTTPError:

print("HTTP Error!")

except ConnectionError:

print("Failed to connect!")

with open("C:\Users\PageFile.txt","w",encoding="ISO-8859-1") as PageFile:

PageFile.write(res.text)

PageFile.close()

with open("C:\Users\PageFile.txt","r",encoding="gbk") as ReadFile:

str=ReadFile.read()

mid=re.split(""", str)

#用"进行分割,以进行正则表达式匹配

for i in mid:

ImgHTML=re.findall("^/tupian/.*.html$",i)

#提取所有符合格式的str放到ImgHTML中

if len(ImgHTML)!=0:

AllImgHTML.append(ImgHTML[0])

def GetImgURL():

#得到每个分页中每个子页面的大图的URL放到UsefulImgURL中

UsefulImgHTML=[None for i in range(len(AllImgHTML))]

#为字符串拼接分配内存

for i in range(len(AllImgHTML)):

UsefulImgHTML[i]=uni+AllImgHTML[i]

#拼接后得到了可用的子页面URL,格式为http://pic.netbian.com//tupian/.*.html

for html in UsefulImgHTML:

#对图片组进行请求

try:

htmlres=requests.get(html)

htmlres.raise_for_status()

except HTTPError:

print("HTTP Error!")

except ConnectionError:

print("Failed to connect!")

with open("C:\Users\ImgHTML.txt","w",encoding="ISO-8859-1") as ImgHTML:

ImgHTML.write(htmlres.text)

ImgHTML.close()

with open("C:\Users\ImgHTML.txt","r",encoding="gbk") as ReadHTML:

str=ReadHTML.read()

mid=re.split(""", str)

for i in mid:

ImgURL=re.search("^/uploads/allimg/.*.jpg$",i)

if ImgURL is not None:

AllImgURL.append(ImgURL[0])

break

#爬到一个大图的URL即break。将每张大图的部分URL存入AllImgURL中,格式为/uploads/allimg/.*.jpg

UsefulImgURL=[None for i in range(len(AllImgURL))]

#拼接得到最终可供下载的URL放到UsefulImgURL中

for i in range(len(AllImgURL)):

UsefulImgURL[i]=uni+AllImgURL[i]

return UsefulImgURL

def DownloadWallpaper(url,path):

try:

res=requests.get(url)

res.raise_for_status()

MyImage=Image.open(BytesIO(res.content))

MyImage.save(path)

print("Done...")

except HTTPError:

print("HTTP Error!")

except ConnectionError:

print("Failed to connect!")

if __name__=="__main__":

GetPageURL(root, 2, 2)

GetImgHTML(AllPage)

UsefulImgURL=GetImgURL()

num=[]

for i in range (len(UsefulImgURL)):

num.append(i)

UsefulSavePath=[None for i in range(len(UsefulImgURL))]

for i in range(len(UsefulSavePath)):

UsefulSavePath[i]="C:\Users\"+str(num[i])+".jpg"

for i in range(len(UsefulImgURL)):

print(i,end=" ")

DownloadWallpaper(UsefulImgURL[i],UsefulSavePath[i])

print("Task completed!")

说明:

1.要爬取从第几页开始的连续几页,就在主函数中修改GetPageURL(root,start,counts)中start和counts的值

2.自己改存放路径,windows下文件操作的路径是\而非

3.图片的名字都是[0-9]*.jpg的格式,有兴趣的可以自己把大图的名字也爬下来设置为图片名称

4.高清原图需要登录,留坑

python爬图片_Python爬虫:彼岸图网图片爬取-Go语言中文社区相关推荐

  1. python爬虫过程中遇到的问题_python爬虫过程中出现的问题汇总-Go语言中文社区

    1.出现 UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 7: ordinal not in range(12 ...

  2. python百度翻译urllib_python爬虫入门--用urllib实现百度翻译-Go语言中文社区

    前言 上一篇内容,已经学会了使用简单的语句对网页进行抓取.接下来,详细看下urlopen的两个重要参数url和data,学习如何发送数据data.我们想做一个百度翻译就需要向百度翻译的服务器发送我们想 ...

  3. python爬虫爬取彼岸图网图片

    python爬虫爬取彼岸图网图片 话不多说,直接上代码! import requests from PIL import Image from io import BytesIO import re ...

  4. 用Python爬取彼岸图网图片

     用Python爬取彼岸图网图片 *使用了  四个模块 import time import requests from lxml import etree import os 没有的话自行百度安装. ...

  5. 多线程爬虫实战--彼岸图网壁纸爬取

    多线程爬虫实战–彼岸图网壁纸爬取 普通方法爬取 import requests from lxml import etree import os from urllib import requesth ...

  6. 解析彼岸图网图片—xpath简单应用

    使用xpath解析图片的url及名称 请求网络页面,对页面进行解析,找到对应图片的url 支持用户自定义图片类型 在此也解决了一个中文乱码的问题 手动设置响应数据的编码格式(处理中文乱码) respo ...

  7. Python爬虫:彼岸图网图片爬取

    杂 哈哈,这是我第一篇博客 半年以后回来再看发现这代码简直太难看了 现在已经弃用大小驼峰转蛇形命名了 确实好看 除了命名别的也写的不怎么样 因为爬虫只是个爱好所以也不准备再投入时间重构了 将就着看吧 ...

  8. python 简单网页_Python爬虫 (一):爬取一个简单的静态网页

    版本:python3.7 平台:windows10 工具 :pycharm 断断续续学习了py3爬虫2周左右的时间,发现自己学习的过于零散化,所以想通过这个专栏系统的整理下自己所学过的知识.如有错误, ...

  9. python爬取文字和图片_python爬虫--xpath结合re同时爬取文字与图片

    还是老家的旅游网址:http://www.patour.cn/site/pananzxw/tcgl/index.html,将这些特产的图片及其介绍都爬取下来! 源码: 1 # -*- coding:u ...

最新文章

  1. 使用c#实现tcp的连接和发送接收数据
  2. [原创]软件测试过程改进的内容和注意事项
  3. Spring Cloud Stream消费失败后的处理策略(二):自定义错误处理逻辑
  4. C# 读取指定文件夹下所有文件
  5. Linux下区分物理CPU、逻辑CPU和CPU核数
  6. el-table合并行的实现
  7. [翻译]Windows Vista的秘密#11: 删除不可删除的东西
  8. PyTorch官方教程《Deep Learning with PyTorch》开源分享,LeCun力荐,通俗易懂
  9. php-fpm配置文件的优化
  10. 浏览器中打开IOS应用并传参
  11. stl之multiset容器的应用
  12. python 如何封装dll_python怎么封装dll
  13. linux如何秀爱swap大小,老毛桃PE启动U盘集合CDlinux,BT5可保存设置,wifislax,sliatz中文定制版的方法[存档......
  14. JavaWeb:下载文件
  15. pycharm汉化包使用后无法打开设置选项问题
  16. python opencv图像笔记
  17. win10卸载软件_win10系统频繁闪屏刷新解决方法
  18. vivado2020报错:error when launching …vivao.bat…launcher time out“
  19. 比林志玲cute的katee
  20. 软件获取imei和imsi_android平台获取手机IMSI、IMEI 、序列号和手机号的方法

热门文章

  1. 个人Blog小程序开发完毕
  2. Stanford CoreNLP--Part of Speech
  3. 教程-Delphi资源文件(全面分析于使用)
  4. 当DIV中的内容超过 div的宽度的时候
  5. 字符串查找函数(BF)
  6. pivotx的entry和page内容里的日期格式修改
  7. [置顶] Lucene开发实例(一般企业搜索平台完全够用全程)
  8. windows2003与文件共享有关的几个进程
  9. Enterprise Library 3.1 简化使用范例一
  10. centos7 安装VNC Server