近日因为一直闲着没事情做,所以笔者决定写一个爬虫来爬取一下某个固定网站的图片,仅供娱乐。

题外话:

该程序主要实现如何根据用户输入的搜索字段和下载数量来下载相应的图片集合,然后将其转化为exe可执行文件。
另外,本文适合刚刚接触Python或者刚刚开始接触爬虫的人阅读,因为用的都是比较初级的知识,所以没有使用代理,也没有使用多线程,代码也只有70多行。
大家需要注意,网站可能随时会更新,用这种方法制作出来的爬虫在网页结构变化后就无法使用。
最后笔者将代码与结果已经上传到Github,感兴趣的伙伴可以star一下。

https://github.com/kiva12138/ReptileForPictures

笔者的QQ是1574143668,有问题的小伙伴随时来交流。

正式实现:

首先我们需要决定爬取的网站,笔者找来找去发现一个网站的内容相对固定,而且更新不频繁,那就是美图录网站。而且这个网站有个搜索特点,那就是每次搜索结果只有前20条,感觉像一个新手制作的网站,而这不是刚刚好适合我们爬取吗?
其次我们需要明白这个网站搜索结果的组织结构,该组织结构为:

搜索结果页面(最多20条目)-> 每个图集的详细内容(每页最多4张图片,页数不确定)

剩下的废话不多说,直接贴上代码,在代码中解释。

#  引入我们所需要的包
import requests
from lxml import etree
import time
import os#  定义一个写入图片的函数。
#  第一个参数是图片内容,第二个是该图片名称,第三个参数是文件夹名称
#  剩下的都是一些基础的Python IO基础了
def writeToFile(content, number, context_name):with open(str(context_name) + '\\' + str(number) + '.jpg', 'wb') as f:try:f.write(content)except:print('淦!鬼知道为什么文件写入失败!可能搜的东西有问题或者网站改了。')if __name__ == '__main__':input_content = ''  # 需要搜索的内容want_mount = 1  # 默认的想要下载的图片集合数量current_mount = 0  # 搜索到的图片集合的数量sleep_time = 1  # 每次下载间隔的时间,防止访问过于频繁而被banexit_code = 'iwantquit'  # 输入该字段就会退出程序search_url = 'https://www.meitulu.com/search/'  # 搜索前缀site_prefix = 'https://www.meitulu.com'  # 网址前缀# 请求头headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 ''Safari/537.36 '}print('为了保证你的访问正常,我们设置下载间隔时间位1秒,可能有点小慢,但是足够你欣赏美图。')# 定义一个死循环,只有输入Ctrl C或者输入“iwantquit”的时候退出 while True:print('----------------------------------------------------')input_content = input('请输入要搜索的内容(输入iwantquit退出程序):')if input_content == exit_code:break# 获取搜索结果页面 并进行编码处理 同时获取选择器search_html = requests.get(search_url + str(input_content))search_html.encoding = 'utf-8'search_selector = etree.HTML(search_html.text)# 该处的Xpath可以使用浏览器的选择功能找到dataList = search_selector.xpath('/html/body/div[2]/div[2]/ul/li')# 如果没有找到任何图集,那么直接要用户再次输入current_mount = len(dataList)if current_mount == 0:print('该搜索字段没有找到任何美图。')continueprint('一共找到了' + str(current_mount) + '个美图集。(好像最多就是20)')# 限制用户的下载数量want_mount = int(input('请输入你想下载的图集数量(<' + str(current_mount) + '):'))if want_mount > current_mount:print('贪得无厌不可取,只给你下载' + str(current_mount) + '张')want_mount = current_mount# 开始下载for i in range(1, want_mount + 1):# 获取标题 作为文件夹的名称title = dataList[i].xpath('p[2]/a/text()')[0]# 创建新的文件夹if not os.path.isdir(title):os.mkdir(title)print('准备下载图集:' + title)content_url = dataList[i].xpath('a/@href')[0]last_page_url = '' # 记录上一页的urlcurrent_page_url = content_url  # 记录当前页的urlnumber = 0  # 用来对单张图片进行命名page = 1  # 记录页数# 这个循环用来不断获取"下一页"# 直到当前页的url和上一页的url不再变化的时候就可以退出循环了while current_page_url != last_page_url:print('正在下载第' + str(page) + '页的图片...')time.sleep(sleep_time)  # 等待一段时间# 获取该page的页面 并进行编码处理 同时获取选择器content_html = requests.get(current_page_url)content_html.encoding = 'utf-8'content_selector = etree.HTML(content_html.text)# 获取图片资源 并且写入文件content_dataList = content_selector.xpath('/html/body/div[4]/center/img')for img_data in content_dataList:img_src = img_data.xpath('@src')[0]img = requests.get(img_src)writeToFile(img.content, number, title)number += 1# 更新当前页 与下一页last_page_url = current_page_urlcurrent_page_url = site_prefix + content_selector.xpath('/html/body/center/div/a')[-1].xpath('@href')[0]page += 1

最后一步:

在将程序调试到没有错误后,最后我们要实现的是如何将Python文件转化为exe文件。最简单的方式就是采用pyinstalller来将py文件转化为exe文件。
首先如果没有pyinstaller的话需要安装:

pip install pyinstaller

然后在py目录下执行命令将其转化为exe文件:

pyinstaller -F -i .\timg.ico .\test.py

其中-i与其参数指定的是文件的图表,可选项。

一个非常简单的爬取网站图片的Python爬虫实例相关推荐

  1. python爬取论坛图片_[python爬虫] Selenium定向爬取虎扑篮球海量精美图片

    前言: 作为一名从小就看篮球的球迷,会经常逛虎扑篮球及湿乎乎等论坛,在论坛里面会存在很多精美图片,包括NBA球队.CBA明星.花边新闻.球鞋美女等等,如果一张张右键另存为的话真是手都点疼了.作为程序员 ...

  2. Python爬取网站图片并保存,超级简单

    Python爬取网站图片并保存,超级简单 先看看结果吧,去bilibili上拿到的图片=-= 第一步,导入模块 import requests from bs4 import BeautifulSou ...

  3. python 第一行 报错_初学Python-只需4步,爬取网站图片

    很多人学习Python很重要的一个原因是,可以很简单的把一个网站的数据爬下来. 尤其是做我们这一行,产品经理,电商行业. 领导:弄一个买卖游戏周边商品的交易APP出来.我:行,那我们卖什么呀?领导:看 ...

  4. 爬取千库网ppt_初学Python-只需4步,爬取网站图片(附py文件)

    很多人学习Python很重要的一个原因是,可以很简单的把一个网站的数据爬下来. 尤其是做我们这一行,产品经理,电商行业. 领导:弄一个买卖游戏周边商品的交易APP出来. 我:行,那我们卖什么呀? 领导 ...

  5. 四个步骤教你爬取网站图片,新手必学

    很多人学习Python很重要的一个原因是,可以很简单的把一个网站的数据爬下来. 尤其是做我们这一行,产品经理,电商行业. 领导:弄一个买卖游戏周边商品的交易APP出来. 我:行,那我们卖什么呀? 领导 ...

  6. python 图片文件_初学Python-只需4步,爬取网站图片(附py文件)

    很多人学习Python很重要的一个原因是,可以很简单的把一个网站的数据爬下来. 尤其是做我们这一行,产品经理,电商行业. 领导:弄一个买卖游戏周边商品的交易APP出来. 我:行,那我们卖什么呀? 领导 ...

  7. C++编写爬虫脚本爬取网站图片

    C++编写爬虫脚本爬取网站图片 整体代码设计思路 具体功能实现 初始化网络库 url中爬取图片 获取网页源代码 连接主机 url中获取主机名和文件名 html中提取连接 html中提取图片链接 获取并 ...

  8. Python网络爬虫——爬取网站图片小工具

    最近初学python爬虫,就写了一个爬取网站图片的小工具,界面如下: 用到的包主要是爬虫常用的urllib,urllib2和图形界面用的Tkinter,完整代码如下: # -*- coding:utf ...

  9. Python爬取网站图片数据

    Python爬取网站图片数据 找到需要爬取的网站地址 模拟网站http请求 根据调试模式获取的了解读取到真实的地址url,读取请求头数据和参数信息,模拟http请求调用 import requests ...

  10. 菜鸟弟弟从零开始的爬取Bilibili弹幕的Python爬虫教程-哔哩哔哩 - ( ゜- ゜)つロ 干杯~

    从零开始的爬取Bilibili弹幕的Python爬虫教程 或许可以作为一个爬虫小白的练手的demo? 还是先看看什么是爬虫吧!(还有Bilibili! ) 网络爬虫: 网络爬虫(又称为网页蜘蛛,网络机 ...

最新文章

  1. Linux无法启动(一)
  2. Linux中link,unlink,close,fclose详解
  3. python中的网页解析器_python爬虫初探(三):HTML解析器
  4. windows server backup
  5. From Hero to Zero
  6. 数跑科技联合阿里云创造基于云原生的无边界数字新体验
  7. form表单获取input对象浏览器区别
  8. SSM项目使用example查询时多次查询条件相同
  9. SQL-连接查询:left join,right join,inner join,full join之间的区别
  10. linux SHELL之结构化命令
  11. PAT乙级1088 三人行 (20分)
  12. Adwonder笔记
  13. css修改输入框的placeholder颜色
  14. 【MyBatis】MyBatis找不到mapper文件
  15. 基于Python的指数基金量化投资 - 正三角和倒三角投资模型
  16. 中小型企业网络构建(思科)
  17. wifi 小米pro 驱动 黑苹果_【黑果小兵】小米Pro macOS High Sierra 10.13黑苹果安装教程...
  18. 阳明先生固天纵英才矣《王阳明全集》作者: 王守仁
  19. 一键封装app--webapp、HybridApp
  20. mysql存储过程基础写法

热门文章

  1. 2021年保育员(中级)考试及保育员(中级)考试总结
  2. 【工作记录】VRLe工作总结
  3. 交换机路由器命令大全
  4. 职场最高级的聪明是靠谱,到底一个人怎样才算真正靠谱?
  5. c语言天数倒计时软件,c语言 日期倒计时 日期计算器
  6. Windows笔记本-U盘无法完成格式化
  7. Flutter 布局报错The following assertion was thrown during performLayout():
  8. 《Docker从入门到实践》
  9. 记录各大吃播饭店地址
  10. HCL_路由器_三层交换