三个步骤就能让你轻松掌握Python爬虫
前言
文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
作者:NicePython
PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http://t.cn/A6Zvjdun
运行环境
- python3.7
- Windows
- vscode
运行依赖包
- requests ( pip install requests 即可安装)
- re
爬虫可以简单的分为:
- 获取数据
- 分析数据
- 存储数据
下载数据
简单来说一个网页是由一个html文件解析构成,我们需要获取这个文本内容。
每个浏览器都可以通过开发者工具获取到文本内容,以chrome为例,打开网页后,右键->检查。
右边的 Elements 就是我们要下载的数据。
让我们看看 requests 是如何获取这个数据的。
url='http://lamyoung.com/';
html=requests.get(url);
if html.status_code == 200:
html_bytes=html.content;
html_str=html_bytes.decode();
上面的 html_str 就是我们需要的源数据。获取数据我们需要一个网页地址,获取后判断状态码是否为200,最后再将内容decode就得到需要的整个html源数据。
分析数据
这次我们用正则表达式去解析源数据,截取到我们需要。关于详细的正则知识可以在这篇文章史上最全面的正则表达式教程中学习。
现在我们的目标是抓取博客的文章标题和链接,我们可以通过刚才的开发者工具获取文章标题和链接的特征。
可以看到我们要的内容都具有以下这种格式。
<a href="链接">
<h2 class="post-title">
标题
</h2>
xxxxxx
</a>
我们就为这种格式写出正则表达式。(ps: 我也写了几次才写对,看不懂的话我们私下交流交流
)
regex = r"<a href=\"(.*)\">[\s]*?<h2 class=\"post-title\">[\s]*(.*)[\s]*</h2>[\s\S]*?</a>"
使用正则表达式中的 findall 把所有内容找出来,并保存在字符串中。
write_content = ''
all_items = re.findall(regex,html_str);
for item in all_items:
write_content=f'{write_content}\n{item[1]}\nhttp://lamyoung.com{item[0]}\n'
但是,我们只爬了其中的一页。还有许多页没有爬呢!(ps: 骄傲脸,我已经写了好多✌️页的原创内容了。)
我们可以点几个下一页,很容易发现其中的规律。
- 第一页:http://lamyoung.com/
- 第二页:http://lamyoung.com/page2/
- 第三页:http://lamyoung.com/page3/
...
为此,我们加个循环判断就可以啦。
index=1
while True:
page_url = '';
if index>1:
page_url=f'page{index}/'
url=f'http://lamyoung.com/{page_url}';
html=requests.get(url);
if html.status_code != 200:
print(html);
break;
在判断状态码为200时,退出循环。
存储数据
这次我们就用文本存储来结束我们的教程吧。
with open('lamyoung_title_out.txt','w',encoding='utf-8') as f:
f.write(write_content)
最后看下输出结果吧~
三个步骤就能让你轻松掌握Python爬虫的更多相关文章
- 数据可视化之powerBI技巧(二十一)简单三个步骤,轻松管理你的Power BI度量值
最近碰到几个星友的问题,都是问我之前分享的源文件是如何把度量值分门别类放到不同的文件夹中的,就像这样, 其实在之前的文章中也曾提及过做法,这里再详细说一下制作步骤: 01 | 新建一个空表 点击菜单栏 ...
- Quatre 2D的绘图功能的三个步骤(上下文,绘图,渲染)
一.qurza2d是怎么将绘图信息和绘图的属性绘制到图形上下文中去的? 说明: 新建一个项目,自定义一个view类和storyboard关联后,重写该类中的drowrect方法. 画线的三个步骤: ( ...
- 阿里云ECS专有网络产品三个步骤配置教程
阿里云ECS专有网络产品三个步骤配置教程 阿里云专有网络节点已开通地域:美国硅谷可用区1B,新加坡可用区A,北京可用区A,深圳可用区A,杭州可用区D,上海可用区B 举个栗子:购买 美国硅谷可用区1B ...
- 梁敬彬老师的《收获,不止SQL优化》,关于如何缩短SQL调优时间,给出了三个步骤,
梁敬彬老师的<收获,不止SQL优化>,关于如何缩短SQL调优时间,给出了三个步骤, 1. 先获取有助调优的数据库整体信息 2. 快速获取SQL运行台前信息 3. 快速获取SQL关联幕后信息 ...
- 算法数据结构 | 三个步骤完成强连通分量分解的Kosaraju算法
强连通分量分解的Kosaraju算法 今天是算法数据结构专题的第35篇文章,我们来聊聊图论当中的强连通分量分解的Tarjan算法. Kosaraju算法一看这个名字很奇怪就可以猜到它也是一个根据人名起 ...
- Python爬虫框架Scrapy安装使用步骤
一.爬虫框架Scarpy简介Scrapy 是一个快速的高层次的屏幕抓取和网页爬虫框架,爬取网站,从网站页面得到结构化的数据,它有着广泛的用途,从数据挖掘到监测和自动测试,Scrapy完全用Python ...
- Python爬虫学习:三、爬虫的基本操作流程
本文是博主原创随笔,转载时请注明出处Maple2cat|Python爬虫学习:三.爬虫的基本操作与流程 一般我们使用Python爬虫都是希望实现一套完整的功能,如下: 1.爬虫目标数据.信息: 2.将 ...
- Python爬虫个人记录(三)爬取妹子图
这此教程可能会比较简洁,具体细节可参考我的第一篇教程: Python爬虫个人记录(一)豆瓣250 Python爬虫个人记录(二)fishc爬虫 一.目的分析 获取煎蛋妹子图并下载 http://jan ...
- Python爬虫进阶三之Scrapy框架安装配置
初级的爬虫我们利用urllib和urllib2库以及正则表达式就可以完成了,不过还有更加强大的工具,爬虫框架Scrapy,这安装过程也是煞费苦心哪,在此整理如下. Windows 平台: 我的系统是 ...
随机推荐
- CF1326A Bad Ugly Numbers 题解
原题链接 简要题意: 构造一个长为 \(n\) 的数,使得每位均不为 \(0\),且 \(n\) 不被它的各位数字整除. 比方说, \(n = 239\) 是合法的.因为: \(2 \not | 23 ...
- 题解 P4302 【[SCOI2003]字符串折叠】
讲讲我的做法 题目大意:对一个字符串进行折叠是它长度最小 看一眼数据范围:哇!字符串长度不超过100!这是一道省选题,不可能给你太宽裕的时限,所以,题目基本暗示你要用\(n^{3}\)多一些的算法复杂 ...
- git push错误,如何回滚
--> git push Counting objects: 81, done.Delta compression using up to 4 threads.Compressing objec ...
- 工作流--Activiti
一.工作流 1.工作流介绍 工作流(Workflow),就是通过计算机对业务流程自动化执行管理.它主要解决的是“使在多个参与者 之间按照某种预定义的规则自动进行传递文档.信息或任务的过程,从而实现某 ...
- 蓝桥杯——一步之遥,扩展gcd的应用
1. 一步之遥 [问题描述]从昏迷中醒来,小明发现自己被关在X星球的废矿车里.矿车停在平直的废弃的轨道上.他的面前是两个按钮,分别写着“F”和“B”. 小明突然记起来,这两个按钮可以控制矿车在轨道上前 ...
- Qt 事件和信号的关系
Qt的事件是windows的底层消息封装而成的.这个消息和MFC里的消息是同一概念,都是指键盘.鼠标等的按压.松开等消息.例如按下键盘后,windows系统会发出一个 WM_KEYDOWN的消息,Qt ...
- 性能计数器在.NET Core中的新玩法
传统的.NET Framework提供的System.Diagnostics.PerformanceCounter类型可以帮助我们收集Windows操作系统下物理机或者进程的性能指标,基于Perfor ...
- adb基本命令操作(四)
一,基本操作命令 adb shell:进入手机系统 说明:root表示手机当前的操作用户,也是最高权限操作者 cd ,可以切换目录,执行cd /sdcard 表示手机内部的存储路径,也是表示内部存储 ...
- 初学jQuery使用方法
jQuery引用 <script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></scri ...
- coding++:Java 获取request中的参数
第一种: private Map<String,Object> mapParameters(HttpServletRequest request) { //封装查询条件参数 Map< ...