三个步骤就能让你轻松掌握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)
最后看下输出结果吧~
最新文章
- Java知识点归总一之堆栈
- 伸缩盒子模型,旧的伸缩盒子模型。浏览器内核、css继承属性
- Amazon的推荐系统
- 最新13个加速 Web 开发的框架和工具
- Dojo Tree设置默认选中项并且获得它
- 关于@synchronized(self)的用法
- 关于Python的3张图
- Cocos2d-x学习笔记(六) 定时器Schedule的简单应用
- Android JNI(NDK)开发总结
- NYIST OJ 题目20 吝啬的王国
- Django push: Using Server-Sent Events and WebSocket with Django
- REST API设计指导——译自Microsoft REST API Guidelines(二)
- 最近邻算法(KNN)
- linux中telnet后退出连接窗口的方法?
- excel怎么在插入的方框上打勾
- 学习Spark2.0中的Structured Streaming(一)
- Java中的三大框架分别有什么用
- 在Asp.Net Core中取得物理路径
- Eclipse搭建Gradle环境
- 处理器拦截器(HandlerInterceptor)详解