网站首页 > 技术文章 正文
来源:Python爬虫与数据挖掘
作者:Python进阶者
1、前言
相信大家在知识共享的这个年代一定在网上下载了很多的文件保存以供日后有时间学习吧,毕竟硬盘空间也比较有限,下面我们就来说说我们要做的这个项目,就是搜索盘搜里的资源然后进行下载。
2、项目目标
实现搜索自己想要的文件,并且下载文件。
3、项目准备
使用sublime text 3 开发。因为此次我们需要用到交互式来完成操作,所以需要在sublime text 3 下载一个sublimeREPL插件来进行辅助开发。
4、项目实现
(1)打开盘搜,并随意打开一个链接,如下图所示:
(2)然后可以看到这个画面,如下图所示。
(3)此时这个网页地址为:
http://www.pansou.com/?q=成化十四年
由此可以看出它是一个get请求。于是requests.get搞起来,这样我们就实现了第一步,搜索。于是,可以这样写代码:
import requests
def down(content):
content=input('请输入要下载的文件名')
rep=requests.get('http://www.pansou.com/?q='+str(content))
rep.encoding='utf-8'
(4)这样就得到了上个页面中的网页源代码,我们通过搜索相关关键字发现竟然搜不到:
(5)那么这是怎么回事?原来这是因为ajax异步加载导致的部分关键代码显示不出来。这可就犯难了,换句话说这就触及到我的知识点盲区了。
因为小编并未学过前端,只知道有ajax这回事,哪里知道这个问题怎么产生怎么解决了。不过不用怕,还好小编有一个大绝招,那就是找接口。我找呀找,终于被我找到了,哎,功夫不负苦心人。如图所示:
(6)发现这是个json格式的所以我们现在可以将他进行读取,如图:
(7)不容易啊,json的坑很多,于是决定用字典。哈哈哈哈,果然适合自己的才是最香的。
找到了这些东西我们就可以把他们提取出来啦,这样我们就提取出了第一页的所有结果,要想提取第二页的结果只需将p的结果改为2即可。
最终的结果,如图:
(8)接下来我们强化下程序,让他具有交互功能,供用户选择。
(9)但是我们了解到callback一般都是可变的函数,所以真正能用上的就只有两个参数,q和p,于是:
这样就完成了指定页面的文件浏览。
下载的话也比较简单,直接将链接复制到浏览器中即可,这样就完成了一个最简单的搜索引擎了。
5、小结
(1)不建议抓取太多数据,容易对服务器造成负载,浅尝辄止即可。
(2)本文基于Python网络爬虫,利用爬虫库,打造了一款简易的Python搜索引擎。
(3)实现的时候,总会有各种各样的问题,切勿眼高手低,勤动手,才可以理解的更加深刻。
猜你喜欢
- 2025-01-01 Python的一个轻量级桌面GUI开发第三方库:Eel
- 2025-01-01 隐藏彩蛋:你知道python有一个内置的数据库吗?
- 2025-01-01 Python编程绝对初学者指南,一步一步的指南,有示例和实验练习
- 2025-01-01 python服务器socket编程
- 2025-01-01 「大数据」Hana入门
- 2025-01-01 搭建Python自带静态Web服务器
- 2025-01-01 python套接字socket编程搭建简易服务器,完成计算器实例
- 2025-01-01 Python快速搭建HTTP服务
- 2025-01-01 手把手教你使用Python轻松搞定发邮件
- 2025-01-01 软件测试工程师必会技术:Python带你上手WebSocket
- 1509℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 523℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 491℃MySQL service启动脚本浅析(r12笔记第59天)
- 470℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 468℃启用MySQL查询缓存(mysql8.0查询缓存)
- 448℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 428℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 425℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)