热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python爬虫爬点大家喜欢的东西

要说最美好的欲望莫过于看黑丝美眉。一、技术路线requests:网页请求BeautifulSoup:解析html网页re:正则表达式&

要说最美好的欲望莫过于看黑丝美眉。

一、技术路线

requests:网页请求
BeautifulSoup:解析html网页
re:正则表达式,提取html网页信息
os:保存文件

import re
import requests
import os
from bs4 import BeautifulSoup

二、获取网页信息

获取网页信息的固定格式,返回的字符串格式的网页内容,其中headers参数可模拟人为的操作,‘欺骗’网站不被发现

def getHtml(url): #固定格式,获取html内容headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'} #模拟用户操作try:r = requests.get(url, headers=headers)r.raise_for_status()r.encoding = r.apparent_encodingreturn r.textexcept:print('网络状态错误')
三、网页爬取分析

右键单击图片区域,选择 审查元素 ,可以查看当前网页图片详情链接,我就满心欢喜的复制链接打开保存,看看效果,结果一张图片只有60几kb,这就是缩略图啊,不清晰,果断舍弃。。。

 <图片放不出来啊啊啊~~~>

 没有办法&#xff0c;只有点击找到详情页链接&#xff0c;再进行单独爬取。

空白右键&#xff0c;查看页面源代码&#xff0c;把刚刚复制的缩略图链接复制查找快速定位&#xff0c;分析所有图片详情页链接存在div标签&#xff0c;并且class&#61;‘list’ 唯一&#xff0c;因此可以使用BeautifulSoup提取此标签。并且发现图片详情页链接在herf&#61;后面&#xff08;同时我们注意到有部分无效链接也在div标签中&#xff0c;观察它们异同&#xff0c;发现无效链接存在&#39;https&#39;字样&#xff0c;因此可在代码中依据此排出无效链接&#xff0c;对应第4条中的函数代码&#xff09;&#xff0c;只需提取出来再在前面加上网页首页链接即可打开&#xff0c;并且右键图片&#xff0c;‘审查元素’&#xff0c;复制链接下载的图片接近1M&#xff0c;表示是高清图片了&#xff0c;到这一步我们只需调用下载保存函数即可保存图片


四、网页详情页链接获取

首要目标是将每页的每个图片的详情页链接给爬取下来&#xff0c;为后续的高清图片爬取做准备&#xff0c;这里直接使用定义函数def getUrlList(url)

def getUrlList(url): # 获取图片链接url_list &#61; [] #存储每张图片的url&#xff0c;用于后续内容爬取demo &#61; getHtml(url)soup &#61; BeautifulSoup(demo,&#39;html.parser&#39;)sp &#61; soup.find_all(&#39;div&#39;, class_&#61;"list") #class&#61;&#39;list&#39;在全文唯一&#xff0c;因此作为锚&#xff0c;获取唯一的div标签&#xff1b;注意&#xff0c;这里的网页源代码是class&#xff0c;但是python为了和class&#xff08;类&#xff09;做区分&#xff0c;在最后面添加了_nls &#61; re.findall(r&#39;a href&#61;"(.*?)" rel&#61;"external nofollow" rel&#61;"external nofollow" &#39;, str(sp)) #用正则表达式提取链接for i in nls:if &#39;https&#39; in i: #因所有无效链接中均含有&#39;https&#39;字符串&#xff0c;因此直接剔除无效链接&#xff08;对应第3条的分析&#xff09;continueurl_list.append(&#39;http://www.netbian.com&#39; &#43; i) #在获取的链接中添加前缀&#xff0c;形成完整的有效链接return url_list
五、依据图片链接保存图片

通过上面获取了每个图片的详情页链接后&#xff0c;打开&#xff0c;右键图片审查元素&#xff0c;复制链接即可快速定位&#xff0c;然后保存图片

def fillPic(url,page):pic_url &#61; getUrlList(url) #调用函数&#xff0c;获取当前页的所有图片详情页链接path &#61; &#39;./美女&#39; # 保存路径for p in range(len(pic_url)):pic &#61; getHtml(pic_url[p])soup &#61; BeautifulSoup(pic, &#39;html.parser&#39;)psoup &#61; soup.find(&#39;div&#39;, class_&#61;"pic") #class_&#61;"pic"作为锚&#xff0c;获取唯一div标签&#xff1b;注意&#xff0c;这里的网页源代码是class&#xff0c;但是python为了和class&#xff08;类&#xff09;做区分&#xff0c;在最后面添加了_picUrl &#61; re.findall(r&#39;src&#61;"(.*?)"&#39;, str(psoup))[0] #利用正则表达式获取详情图片链接&#xff0c;因为这里返回的是列表形式&#xff0c;所以取第一个元素&#xff08;只有一个元素&#xff0c;就不用遍历的方式了&#xff09;pic &#61; requests.get(picUrl).content #打开图片链接&#xff0c;并以二进制形式返回&#xff08;图片&#xff0c;声音&#xff0c;视频等要以二进制形式打开&#xff09;image_name &#61;&#39;美女&#39; &#43; &#39;第{}页&#39;.format(page) &#43; str(p&#43;1) &#43; &#39;.jpg&#39; #给图片预定名字image_path &#61; path &#43; &#39;/&#39; &#43; image_name #定义图片保存的地址with open(image_path, &#39;wb&#39;) as f: #保存图片f.write(pic)print(image_name, &#39;下载完毕&#xff01;&#xff01;&#xff01;&#39;)
六、main()函数

经过前面的主体框架搭建完毕之后&#xff0c;对整个程序做一个前置化&#xff0c;直接上代码

在这里第1页的链接是
www.netbian.com/meinv/

第2页的链接是
www.netbian.com/meinv/index…

并且后续页面是在第2页的基础上仅改变最后的数字&#xff0c;因此在写代码的时候要注意区分第1页和后续页面的链接&#xff0c;分别做处理&#xff1b;同时在main()函数还增加了自定义爬取页数的功能&#xff0c;详见代码

<图片放不出来啊啊啊~~~>

def main():n &#61; input(&#39;请输入要爬取的页数&#xff1a;&#39;)url &#61; &#39;http://www.netbian.com/meinv/&#39; # 资源的首页&#xff0c;可根据自己的需求查看不同分类&#xff0c;自定义改变目录&#xff0c;爬取相应资源if not os.path.exists(&#39;./美女&#39;): # 如果不存在&#xff0c;创建文件目录os.mkdir(&#39;./美女/&#39;)page &#61; 1fillPic(url, page) # 爬取第一页&#xff0c;因为第1页和后续页的链接的区别&#xff0c;单独处理第一页的爬取if int(n) >&#61; 2: #爬取第2页之后的资源ls &#61; list(range(2, 1 &#43; int(n)))url &#61; &#39;http://www.netbian.com/meinv/&#39;for i in ls: #用遍历的方法对输入的需求爬取的页面做分别爬取处理page &#61; str(i)url_page &#61; &#39;http://www.netbian.com/meinv/&#39;url_page &#43;&#61; &#39;index_&#39; &#43; page &#43; &#39;.htm&#39; #获取第2页后的每页的详情链接fillPic(url, page) #调用fillPic()函数
七、完整代码

最后再调用main()&#xff0c;输入需要爬取的页数&#xff0c;即可开始爬取&#xff0c;完整代码如下

import re
import requests
import os
from bs4 import BeautifulSoupdef getHtml(url): #固定格式&#xff0c;获取html内容headers &#61; {&#39;User-Agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36&#39;} #模拟用户操作try:r &#61; requests.get(url, headers&#61;headers)r.raise_for_status()r.encoding &#61; r.apparent_encodingreturn r.textexcept:print(&#39;网络状态错误&#39;)def getUrlList(url): # 获取图片链接url_list &#61; [] #存储每张图片的url&#xff0c;用于后续内容爬取demo &#61; getHtml(url)soup &#61; BeautifulSoup(demo,&#39;html.parser&#39;)sp &#61; soup.find_all(&#39;div&#39;, class_&#61;"list") #class&#61;&#39;list&#39;在全文唯一&#xff0c;因此作为锚&#xff0c;获取唯一的div标签&#xff1b;注意&#xff0c;这里的网页源代码是class&#xff0c;但是python为了和class&#xff08;类&#xff09;做区分&#xff0c;在最后面添加了_nls &#61; re.findall(r&#39;a href&#61;"(.*?)" rel&#61;"external nofollow" rel&#61;"external nofollow" &#39;, str(sp)) #用正则表达式提取链接for i in nls:if &#39;https&#39; in i: #因所有无效链接中均含有&#39;https&#39;字符串&#xff0c;因此直接剔除无效链接&#xff08;对应第3条的分析&#xff09;continueurl_list.append(&#39;http://www.netbian.com&#39; &#43; i) #在获取的链接中添加前缀&#xff0c;形成完整的有效链接return url_listdef fillPic(url,page):pic_url &#61; getUrlList(url) #调用函数&#xff0c;获取当前页的所有图片详情页链接path &#61; &#39;./美女&#39; # 保存路径for p in range(len(pic_url)):pic &#61; getHtml(pic_url[p])soup &#61; BeautifulSoup(pic, &#39;html.parser&#39;)psoup &#61; soup.find(&#39;div&#39;, class_&#61;"pic") #class_&#61;"pic"作为锚&#xff0c;获取唯一div标签&#xff1b;注意&#xff0c;这里的网页源代码是class&#xff0c;但是python为了和class&#xff08;类&#xff09;做区分&#xff0c;在最后面添加了_picUrl &#61; re.findall(r&#39;src&#61;"(.*?)"&#39;, str(psoup))[0] #利用正则表达式获取详情图片链接&#xff0c;因为这里返回的是列表形式&#xff0c;所以取第一个元素&#xff08;只有一个元素&#xff0c;就不用遍历的方式了&#xff09;pic &#61; requests.get(picUrl).content #打开图片链接&#xff0c;并以二进制形式返回&#xff08;图片&#xff0c;声音&#xff0c;视频等要以二进制形式打开&#xff09;image_name &#61;&#39;美女&#39; &#43; &#39;第{}页&#39;.format(page) &#43; str(p&#43;1) &#43; &#39;.jpg&#39; #给图片预定名字image_path &#61; path &#43; &#39;/&#39; &#43; image_name #定义图片保存的地址with open(image_path, &#39;wb&#39;) as f: #保存图片f.write(pic)print(image_name, &#39;下载完毕&#xff01;&#xff01;&#xff01;&#39;)def main():n &#61; input(&#39;请输入要爬取的页数&#xff1a;&#39;)url &#61; &#39;http://www.netbian.com/meinv/&#39; # 资源的首页&#xff0c;可根据自己的需求查看不同分类&#xff0c;自定义改变目录&#xff0c;爬取相应资源if not os.path.exists(&#39;./美女&#39;): # 如果不存在&#xff0c;创建文件目录os.mkdir(&#39;./美女/&#39;)page &#61; 1fillPic(url, page) # 爬取第一页&#xff0c;因为第1页和后续页的链接的区别&#xff0c;单独处理第一页的爬取if int(n) >&#61; 2: #爬取第2页之后的资源ls &#61; list(range(2, 1 &#43; int(n)))url &#61; &#39;http://www.netbian.com/meinv/&#39;for i in ls: #用遍历的方法对输入的需求爬取的页面做分别爬取处理page &#61; str(i)url_page &#61; &#39;http://www.netbian.com/meinv/&#39;url_page &#43;&#61; &#39;index_&#39; &#43; page &#43; &#39;.htm&#39; #获取第2页后的每页的详情链接fillPic(url_page, page) #调用fillPic()函数main()

最后

只看书不会进步&#xff0c;思考和实践才有成长&#xff0c;自学编程是一个比较枯燥的过程&#xff0c;如果没有正向反馈&#xff0c;学习的积极性很容易被打压下来&#xff0c;所以你应该积极参与到相关的技术圈子中去&#xff0c;尝试去解答力所能及的新手问题&#xff0c;向圈子中的大牛们寻求帮助&#xff0c;善于总结自己所学到的东西&#xff0c;分享给更多的人&#xff0c;记住&#xff0c;你不是一个人在战斗。

如果对Python感兴趣的话&#xff0c;可以试试我的学习方法以及相关的学习资料

对于0基础小白入门&#xff1a;

如果你是零基础小白&#xff0c;想快速入门Python是可以考虑培训的。

一方面是学习时间相对较短&#xff0c;学习内容更全面更集中。

Python所有方向的学习路线

Python所有方向的技术点做的整理&#xff0c;形成各个领域的知识点汇总&#xff0c;它的用处就在于&#xff0c;你可以按照上面的知识点去找对应的学习资源&#xff0c;保证自己学得较为全面。

在这里插入图片描述
温馨提示&#xff1a;篇幅有限&#xff0c;已打包文件夹&#xff0c;获取方式在“文末”&#xff01;&#xff01;&#xff01;

二、Python必备开发工具

在这里插入图片描述

三、Python视频合集

观看零基础学习视频&#xff0c;看视频学习是最快捷也是最有效果的方式&#xff0c;跟着视频中老师的思路&#xff0c;从基础到深入&#xff0c;还是很容易入门的。
在这里插入图片描述
在这里插入图片描述

四、实战案例

光学理论是没用的&#xff0c;要学会跟着一起敲&#xff0c;要动手实操&#xff0c;才能将自己的所学运用到实际当中去&#xff0c;这时候可以搞点实战案例来学习。
在这里插入图片描述

五、Python练习题

检查学习结果。
在这里插入图片描述

六、面试资料

我们学习Python必然是为了找到高薪的工作&#xff0c;下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料&#xff0c;并且有阿里大佬给出了权威的解答&#xff0c;刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

这份完整版的Python全套学习资料已经上传CSDN&#xff0c;朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述


推荐阅读
  • 本文深入探讨了JavaScript中实现继承的四种常见方法,包括原型链继承、构造函数继承、组合继承和寄生组合继承。对于正在学习或从事Web前端开发的技术人员来说,理解这些继承模式对于提高代码质量和维护性至关重要。 ... [详细]
  • 本文介绍了如何利用Python进行批量图片尺寸调整,包括放大和等比例缩放。文中提供了详细的代码示例,并解释了每个步骤的具体实现方法。 ... [详细]
  • 利用Selenium与ChromeDriver实现豆瓣网页全屏截图
    本文介绍了一种使用Selenium和ChromeDriver结合Python代码,轻松实现对豆瓣网站进行完整页面截图的方法。该方法不仅简单易行,而且解决了新版Selenium不再支持PhantomJS的问题。 ... [详细]
  • 一个登陆界面
    预览截图html部分123456789101112用户登入1314邮箱名称邮箱为空15密码密码为空16登 ... [详细]
  • 本文将详细介绍Nose这一非标准库的Python测试框架,它虽然不是Python官方发行版的一部分,但与unittest框架紧密相关,旨在通过简化测试流程来提升开发效率。 ... [详细]
  • Python 内存管理机制详解
    本文深入探讨了Python的内存管理机制,涵盖了垃圾回收、引用计数和内存池机制。通过具体示例和专业解释,帮助读者理解Python如何高效地管理和释放内存资源。 ... [详细]
  • 目录一、salt-job管理#job存放数据目录#缓存时间设置#Others二、returns模块配置job数据入库#配置returns返回值信息#mysql安全设置#创建模块相关 ... [详细]
  • 基于机器学习的人脸识别系统实现
    本文介绍了一种使用机器学习技术构建人脸识别系统的实践案例。通过结合Python编程语言和深度学习框架,详细展示了从数据预处理到模型训练的完整流程,并提供了代码示例。 ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • 解决TensorFlow CPU版本安装中的依赖问题
    本文记录了在安装CPU版本的TensorFlow过程中遇到的依赖问题及解决方案,特别是numpy版本不匹配和动态链接库(DLL)错误。通过详细的步骤说明和专业建议,帮助读者顺利安装并使用TensorFlow。 ... [详细]
  • 深入理解Vue.js:从入门到精通
    本文详细介绍了Vue.js的基础知识、安装方法、核心概念及实战案例,帮助开发者全面掌握这一流行的前端框架。 ... [详细]
  • Python + Pytest 接口自动化测试中 Token 关联登录的实现方法
    本文将深入探讨 Python 和 Pytest 在接口自动化测试中如何实现 Token 关联登录,内容详尽、逻辑清晰,旨在帮助读者掌握这一关键技能。 ... [详细]
  • Symfony是一个功能强大的PHP框架,以其依赖注入(DI)特性著称。许多流行的PHP框架如Drupal和Laravel的核心组件都基于Symfony构建。本文将详细介绍Symfony的安装方法及其基本使用。 ... [详细]
  • java文本编辑器,java文本编辑器设计思路
    java文本编辑器,java文本编辑器设计思路 ... [详细]
  • Google排名优化-面向Google(Search Engine Friendly)的URL设计 ... [详细]
author-avatar
手机用户2602935405
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有