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

在这里插入图片描述


推荐阅读
  • 本文详细介绍了如何使用Python编写爬虫程序,从豆瓣电影Top250页面抓取电影信息。文章涵盖了从基础的网页请求到处理反爬虫机制,再到多页数据抓取的全过程,并提供了完整的代码示例。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 百度搜索结果链接提取工具 UrlGetter V1.43
    该工具专为获取百度搜索引擎的结果页面中的网址链接而设计,能够解析并转换为原始URL。通过正则表达式匹配技术,精准提取网页链接,并提供详细的使用说明和下载资源。 ... [详细]
  • 本文深入探讨了HTTP请求和响应对象的使用,详细介绍了如何通过响应对象向客户端发送数据、处理中文乱码问题以及常见的HTTP状态码。此外,还涵盖了文件下载、请求重定向、请求转发等高级功能。 ... [详细]
  • PHP 过滤器详解
    本文深入探讨了 PHP 中的过滤器机制,包括常见的 $_SERVER 变量、filter_has_var() 函数、filter_id() 函数、filter_input() 函数及其数组形式、filter_list() 函数以及 filter_var() 和其数组形式。同时,详细介绍了各种过滤器的用途和用法。 ... [详细]
  • 本文详细探讨了HTML表单中GET和POST请求的区别,包括它们的工作原理、数据传输方式、安全性及适用场景。同时,通过实例展示了如何在Servlet中处理这两种请求。 ... [详细]
  • 本文介绍如何使用Perl编写一个简单的爬虫,从丁香园网站获取意大利的新冠病毒感染情况。通过LWP::UserAgent模块模拟浏览器访问并解析网页内容,最终提取所需数据。 ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
  • 本文详细介绍如何利用已搭建的LAMP(Linux、Apache、MySQL、PHP)环境,快速创建一个基于WordPress的内容管理系统(CMS)。WordPress是一款流行的开源博客平台,适用于个人或小型团队使用。 ... [详细]
  • Ihaveastringwithquotesaroundthepathasfollows:我在路径周围有一个带引号的字符串,如下所示:C:\ProgramFiles(x ... [详细]
  • Python处理Word文档的高效技巧
    本文详细介绍了如何使用Python处理Word文档,涵盖从基础操作到高级功能的各种技巧。我们将探讨如何生成文档、定义样式、提取表格数据以及处理超链接和图片等内容。 ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • 本文介绍如何从字符串中移除大写、小写、特殊、数字和非数字字符,并提供了多种编程语言的实现示例。 ... [详细]
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社区 版权所有