热门标签 | 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%免费

在这里插入图片描述


推荐阅读
  • CSS|网格-行-结束属性原文:https://www.gee ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • 本文整理了常用的CSS属性及用法,包括背景属性、边框属性、尺寸属性、可伸缩框属性、字体属性和文本属性等,方便开发者查阅和使用。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • HTML学习02 图像标签的使用和属性
    本文介绍了HTML中图像标签的使用和属性,包括定义图像、定义图像地图、使用源属性和替换文本属性。同时提供了相关实例和注意事项,帮助读者更好地理解和应用图像标签。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
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社区 版权所有