明天就是1024了,Python前来报到!爬取全网M子图片!
今天是1024程序员节,不得整点活~
虽然不太好教爬1024,但是可以爬点其它的!
比如妹子图,这不都是各位喜欢的~
代码流程
模拟浏览器向服务器发送一个http请求,网站接收到请求后返回数据。
在写爬虫代码的时候一定先要去模拟浏览器访问,因为现在的网站当接收到http请求后会校验当前请求是否是一个浏览器,如果是,允许访问,如果不是,禁止访问!
环境啥的我就不说了,还是老样子~
首先把我们要用的包导进去
import os # 自动创建文件夹 import requests # requests 爬虫包 需要下载 pip install requests from bs4 import BeautifulSoup # 网页选择器 pip install bs4
然后我们就要开始模拟浏览器
headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36', # 反盗链 'referer': 'https://www.mzitu.com/' }
既然我们要下载,当然要有文件夹去保存对吧,这里就实现自动创建文件夹,不用我们去额外创建。
def get_girls(url): # 自动创建文件夹 if not os.path.exists('./学习资料/'): os.mkdir('./学习资料/')
当然,为了不让你的小秘密被别人看到,咱们这里就把它命名为学习资料吧~
我们现在来发送请求,http协议中 有几种请求方法:
- get 获取数据
- post 数据提交 [账号密码提交]
html = requests.get(url, headers=headers).text
print(html)
对刚刚抓取到的数据进行二次筛选
需要两个参数,想要二次提取的网页 html变量临时保存了。
html解析库 lxml pip install lxml
html解析库可以将html代码转成我们的python对象
soup = BeautifulSoup(html, 'lxml')
通过刚刚分析得出一个结论,一张图片是由img标签保存的,li标签包含一个img标签。如果我们获取了所有的li标签,相当于获取到了所有的img标签,因为一个ul标签包含了所有的li标签,所以获取一个ul就相当于获取到了所有的li标签。
遍历所有的li标签
all_list = soup.find('ul', id='pins').find_all_next('li') for _ in all_list: girl_title = _.get_text() girl_url = _.find('img')['data-original'] print(girl_title, girl_url)
这个时候就可以开始下载了
response = requests.get(girl_url, headers=headers) fileName = girl_title + '.jpg' print('正在保存图片:', girl_title) with open('./学习资料/' + fileName, 'wb') as f: f.write(response.content)
当然,只下载一页的话当然不过瘾,咱们这里就来实现翻页下载,当然,别爬多了,克制一下自己。
代码虽好,但还是要克制一下自己哟~
for page in range(1, 256): url = 'https://www.mzitu.com/page/%s' % page get_girls(url)
你要下载多少页,直接改成多少页就好了。
兄弟们学习python,有时候不知道怎么学,从哪里开始学。掌握了基本的一些语法或者做了两个案例后,不知道下一步怎么走,不知道如何去学习更加高深的知识。
那么对于这些大兄弟们,我准备了大量的免费视频教程,PDF电子书籍,以及视频源的源代码!
还会有大佬解答!
包括本文源代码、对应视频都在这里了 点击蓝色字体即可获取这些福利
欢迎加入,一起讨论 一起学习!
我们看看结果
只能打码了,委婉一点。
文件夹我也不打开了,大家等下自己去试试,然后再慢慢打开把哈哈~
兄弟们,如果看完了感觉还过的去的话,记得来个三连,你的三连就是我最大的动力!
有啥问题和建议都可以在评论区一起交流~
原文地址:https://www.cnblogs.com/hahaa/p/15449837.html
- 妙趣横生的HTML5 Page Visibility API
- 禁止/移除 WordPress 4.2 中前台自动加载的 emjo 脚本
- 项目管理方面的几个.NET开源项目
- 如何向十岁以下的朋友解释编程?这个说法碉堡了!
- 快速比较和合并文件
- 前端页面中 iOS 版微信长按识别二维码的bug 与解决方案
- .NET Mass Downloader -整体下载.NET源码
- Android中Button
- Pycharm中一些不为人知的技巧
- Silverlight 2.0 beta1 堆栈
- 微信内置浏览器 长按识别二维码 功能的两三个坑与解决方案
- Android中EditText
- 比特币分叉了,这到底是怎么回事?
- Excel导入导出数据库01
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Spring Cloud Hystrix - 服务容错
- 记一次内存溢出问题的排查、分析过程及解决思路
- Spring Cloud Sleuth + Zipkin 实现服务追踪
- Docker化你的SpringBoot项目
- 微信公众号开发者模式介绍及接入
- SpringBoot2.x整合MyBatis
- 使用微信测试账号对网页进行授权
- Spring JMS的使用
- 使用Java编写ActiveMQ的队列模式和主题模式
- 安装ActiveMQ
- Spring Cloud Zuul 快速入门
- Spring Cloud 集成 RabbitMQ
- SpringBoot2.x集成Apache Shiro并完成简单的Case开发
- Spring Security权限框架理论与简单Case
- leetcode树之N叉树的前序遍历