前言

最近在做监控相关的配套设施,发现很多脚本都是基于Python的。很早之前就听说其大名,人生苦短,我学Python,这并非一句戏言。随着人工智能、机器学习、深度学习的崛起,目前市面上大部分的人工智能的代码 大多使用Python 来编写。所以人工智能时代,是时候学点Python了。

进军指南

对于没有任何语言开发经验的同学,建议从头系统的学起,无论是书、视频还是文字教程都可以。

如果是有其他语言开发经验的同学,建议从一个案例入手,比如爬取某个网站的套图。

因为语言都是想通的,语法之类的只要你要语感,代码基本能读个八九不离十。

所以不建议有经验的开发者从头学起,无论是视频还是书,对于开始学一门语言来说都是太浪费时间了。

当然,等你深入进去以后,还是要系统的去学习,这是后话。

软件工具

Python3

这里选择的是最新版 Python 3.7.1

安装教程推荐:

http://www.runoob.com/python3/python3-install.html

Win下载地址:

https://www.python.org/downloads/windows

Linux下载地址:

https://www.python.org/downloads/source

PyCharm

可视化开发工具:

http://www.jetbrains.com/pycharm

案例

实现步骤

以妹子图为例,其实很简单,分以下四步:获取首页的页码数,并创建与页码对应的文件夹

获取页面的栏目地址

进入栏目,获取栏目页码数(每个栏目下有多张图片,分页显示)

获取到栏目下对用标签中的图片并下载

注意事项

爬取过程中,还需要注意以下几点,可能对你有所帮助:

1)导库,其实就类似于Java中框架或者是工具类,底层都被封装好了

安装第三方库# Win下直接装的 python3pip install bs4、pip install requests# Linux python2 python3 共存pip3 install bs4、pip3 install requests

导入第三方库# 导入requests库import requests# 导入文件操作库import os# bs4全名BeautifulSoup,是编写python爬虫常用库之一,主要用来解析html标签。import bs4from bs4 import BeautifulSoup# 基础类库import sys# Python 3.x 解决中文编码问题import importlibimportlib.reload(sys)

2)定义方法函数,一个爬虫可能会几百行,所以尽量不要写成一坨def download(page_no, file_path): # 这里写代码逻辑

3)定义全局变量# 给请求指定一个请求头来模拟chrome浏览器global headers # 告诉编译器这是全局变量 headers headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36'}# 函数内使用之前需要# 告诉编译器我在这个方法中使用的a是刚才定义的全局变量 headers ,而不是方法内部的局部变量。global headers

4)防盗链

有些网站加入了防盗链,无所不能的 python 解决方案headers = {'Referer': href}img = requests.get(url, headers=headers)

5)切换版本

Linux服务器使用的是阿里云服务器,默认版本 python2,python3 自行安装[root@AY140216131049Z mzitu]# python2 -VPython 2.7.5[root@AY140216131049Z mzitu]# python3 -VPython 3.7.1# 默认版本[root@AY140216131049Z mzitu]# python -VPython 2.7.5# 临时切换版本 [root@AY140216131049Z mzitu]# alias python='/usr/local/bin/python3.7'[root@AY140216131049Z mzitu]# python -VPython 3.7.1

6)异常捕获

在爬取的过程中可能存在异常页面,这里我们进行捕获,不影响后续操作try: # 业务逻辑except Exception as e: print(e)

代码实现

编辑脚本:vi mzitu.py#coding=utf-8

#!/usr/bin/python

# 导入requests库

importrequests

# 导入文件操作库

importos

importbs4

frombs4importBeautifulSoup

importsys

importimportlib

importlib.reload(sys)

# 给请求指定一个请求头来模拟chrome浏览器

globalheaders

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36'}

# 爬图地址

mziTu ='http://www.mzitu.com/'

# 定义存储位置

globalsave_path

save_path ='/mnt/data/mzitu'

# 创建文件夹

defcreateFile(file_path):

ifos.path.exists(file_path)isFalse:

os.makedirs(file_path)

# 切换路径至上面创建的文件夹

os.chdir(file_path)

# 下载文件

defdownload(page_no, file_path):

globalheaders

res_sub = requests.get(page_no, headers=headers)

# 解析html

soup_sub =BeautifulSoup(res_sub.text,'html.parser')

# 获取页面的栏目地址

all_a = soup_sub.find('div',class_='postlist').find_all('a',target='_blank')

count =0

forainall_a:

count = count +1

if(count %2) ==0:

print("内页第几页:"+ str(count))

# 提取href

href = a.attrs['href']

print("套图地址:"+ href)

res_sub_1 = requests.get(href, headers=headers)

soup_sub_1 =BeautifulSoup(res_sub_1.text,'html.parser')

# ------ 这里最好使用异常处理 ------

try:

# 获取套图的最大数量

pic_max = soup_sub_1.find('div',class_='pagenavi').find_all('span')[6].text

print("套图数量:"+ pic_max)

forjinrange(1,int(pic_max) +1):

# print("子内页第几页:" + str(j))

# j int类型需要转字符串

href_sub = href +"/"+ str(j)

print(href_sub)

res_sub_2 = requests.get(href_sub, headers=headers)

soup_sub_2 =BeautifulSoup(res_sub_2.text,"html.parser")

img = soup_sub_2.find('div', class_='main-image').find('img')

ifisinstance(img, bs4.element.Tag):

# 提取src

url = img.attrs['src']

array = url.split('/')

file_name = array[len(array)-1]

# print(file_name)

# 防盗链加入Referer

headers = {'Referer': href}

img = requests.get(url, headers=headers)

# print('开始保存图片')

f = open(file_name,'ab')

f.write(img.content)

# print(file_name, '图片保存成功!')

f.close()

exceptExceptionase:

print(e)

# 主方法

defmain():

res = requests.get(mziTu, headers=headers)

# 使用自带的html.parser解析

soup =BeautifulSoup(res.text,'html.parser')

# 创建文件夹

createFile(save_path)

# 获取首页总页数

img_max = soup.find('div', class_='nav-links').find_all('a')[3].text

# print("总页数:"+img_max)

foriinrange(1,int(img_max) +1):

# 获取每页的URL地址

ifi ==1:

page = mziTu

else:

page = mziTu +'page/'+ str(i)

file = save_path +'/'+ str(i)

createFile(file)

# 下载每页的图片

print("套图页码:"+ page)

download(page, file)

__name__ == :

main()

脚本在Linux服务器下运行,执行以下命令python 3 mzitu.py # 或者后台执行nohup python3 -u mzitu.py > mzitu.log 2>&1 &

目前只爬取了一个栏目的套图,一共17G,5332张图片。[root@itstyle mzitu]# du -sh 17G .[root@itstyle mzitu]# ll -stotal 5332

下面,请小伙伴们睁大眼睛,鸡冻人心的套图时刻来了。

小结

作为一个初学者,脚本肯定多多少少有一些问题或者待优化的地方,如遇Python大婶,还请多多指教。

其实脚本很简单,从配置环境、安装集成开发环境、编写脚本到整个脚本顺利执行,差不多花费了四五个小时,最终脚本一根筋的执行。限于服务器带宽以及配置的影响,17G的图差不多下载了三四个小时,至于剩下的83G,小伙伴们自行下载吧。

利用python从网络上爬取图片_我用Python爬取了妹子网100G的套图相关推荐

  1. python 爬取_我用Python爬取了妹子网100G的套图

    前言 最近在做监控相关的配套设施,发现很多脚本都是基于Python的.很早之前就听说其大名,人生苦短,我学Python,这并非一句戏言.随着人工智能.机器学习.深度学习的崛起,目前市面上大部分的人工智 ...

  2. 我用Python爬取了妹子网100G的套图

    前言 最近在做监控相关的配套设施,发现很多脚本都是基于Python的.很早之前就听说其大名,人生苦短,我学Python,这并非一句戏言.随着人工智能.机器学习.深度学习的崛起,目前市面上大部分的人工智 ...

  3. Python百行代码轻松爬取了妹子网100G的套图,希望你网盘内存够用

    前言 最近在做监控相关的配套设施,发现很多脚本都是基于Python的.很早之前就听说其大名,人生苦短,我学Python,这并非一句戏言.随着人工智能.机器学习.深度学习的崛起,目前市面上大部分的人工智 ...

  4. 我用Python爬取了妹子网200G的套图

    前言 最近在做监控相关的配套设施,发现很多脚本都是基于Python的.很早之前就听说其大名,人生苦短,我学Python,这并非一句戏言.随着人工智能.机器学习.深度学习的崛起,目前市面上大部分的人工智 ...

  5. python爬虫怎么爬取图片_怎么用python爬取网站Jpg图片

    用python爬取网站图片,通过引用requests库就可完成.下面,小编将以爬取百度图片为例 工具/原料 python环境,网络 安装requests库 1 cmd打开命令行界面,输入pip ins ...

  6. python在地图上标注点_怎样用python画地图上的标注线

    怎样用python画地图上的标注线 发布时间:2020-11-16 09:52:53 来源:亿速云 阅读:90 作者:小新 小编给大家分享一下怎样用python画地图上的标注线,希望大家阅读完这篇文章 ...

  7. python识别图片上的文字_怎么用python识别图片中的文字-百度经验

    在网上看了很多用python进行文字识别的文章,就只有两个字的体会:乱.差.因为很多模块,我都不知道怎么安装,弄得焦头烂额,反而因此浪费了很多时间,而且到最后也是没能成功. 在文章中插入大量BUG,让 ...

  8. java 爬取图片_使用Java多线程爬取网站图片

    使用Java爬取网站的图片并保存至本地 使用maven导入依赖org.jsoup jsoup 1.11.2 实现代码:import org.jsoup.HttpStatusException; imp ...

  9. python在地图上画路线_如何在python中绘制热地图(实例)

    当我们进行数据挖掘工作.或者进行数据可视化以更好地展示成果时,很多时候我们需要借助到热地图的帮助.今天,我们就来介绍一下在seaborn绘图库中热地图heatmap的使用方法及参数设置. 热地图使用场 ...

  10. python批量爬取图片_【原创开源】快手爬虫,根据id批量爬取用户的所有图集和视频...

    更新日志 所有版本更新日志会记录在这里 v0.4.0(2020-03-23) 修复id转eid的一些bug 从该版本开始,爬取视频均为无水印 v0.3.0(2020-03-10) 修复一些因为用户昵称 ...

最新文章

  1. linux我安装虚拟机后安装FTP出现如下错误求解决
  2. php临时文件夹,php-fpm临时文件路径问题【Sytemd PrivateTmp】
  3. html修改原生checkbox选中的颜色_[三分钟小文]前端性能优化-HTML、CSS、JS部分
  4. JS中DOM节点的CRUD
  5. java毛玻璃_模糊效果(毛玻璃效果)
  6. spring学习笔记06-spring整合junit(出现的问题,解决的思路)
  7. 工业智能相机与基于PC的机器视觉的区别比较
  8. Oracle在rownum使用结果集排序
  9. 最短路中部分点只能从中任意选取K个问题
  10. 即时通讯源码_一对一视频直播系统源码是如何实现即时通讯呢?
  11. 讨伐 Google!为什么建智能城市要毫无隐私?| 极客头条
  12. 《软件质量保证与测试》学习笔记【第一章 软件测试基本概念】
  13. visio技巧(曲线、连接点、自制模具)
  14. 海思16DV300 移动侦测
  15. 极速办公ppt里面如何插入表格
  16. 前端CSS射门动画-为梅西最后一届世界杯加油
  17. (更新)Raspberry Pi OS Lite/Full arm64 Bullseye安装Cutefish桌面
  18. RK3399 GMAC驱动失败,打印如下log,DMA engine initialization failed 原因
  19. IOTA,物联网区块链?
  20. Python各个版本特性

热门文章

  1. DDD领域驱动设计 思维导图
  2. word退出时,提示”更改会影响共用模板normal.dotm“的处理办法
  3. Fedora 14 直接root登录
  4. java简历包装项目经验,项目实战
  5. H5打包成app的在线工具
  6. 【解决方案 十八】连接已重置怎么办
  7. 【雨滴风格 时间倒计时置顶显示小工具】
  8. think-cell 无法安装怎么解决?
  9. 【REDIS】redis安装
  10. matlab写实对角矩阵,Matlab对角矩阵