返回介绍

5.5 写一个爬虫

发布于 2023-06-02 10:04:34 字数 6215 浏览 0 评论 0 收藏 0

有了前面四个小节的准备,我们可以用Python来写一个相对复杂的程序了,即一个网络爬虫。这段程序能自动浏览网页,并从网页上抓取我们想要的信息。网络爬虫应用很广,很多搜索引擎都是用爬虫抓取并分析网页信息,从而让不同的网页对应不同的搜索关键字。许多研究互联网行为的学者也会用爬虫抓取网络信息,用来进一步分析人们使用互联网的行为。还有一些下载网络视频或图片的软件,也是基于爬虫来完成主要工作的。很多时候,爬虫可以非常复杂,运行起来也相当耗时。这里,我们想用爬虫做一件简单的事,即让它访问笔者的博客首页,提取出最近文章的发表日期和阅读量。

第一步当然是访问博客首页,获得首页的内容。根据5.4节的内容,这非常简单。笔者的博客的地址是www.cnblogs.com/vamei,主机地址是www.cnblogs.com,资源位置是/vamei。这个页面是一个超文本文件,所以我们用HTTP协议访问:


import http.client

conn      = http.client.HTTPConnection("www.cnblogs.com") # 主机地址
conn.request("GET", "/vamei")             # 请求方法和资源路径
response = conn.getresponse()             # 获得回复

content = response.read()                 # 回复的主体内容
content = content.split("\r\n")           # 分割成行

这里的content是列表,列表的每个元素是超文本的一行。对于我们所关心的信息来说,它们存在的行看起来是下面的样子:


<div class="postDesc">posted @ 2014-08-12 20:55 Vamei 阅读(6221) 评论(11)  <a href ="http://i.cnblogs.com/EditPosts.aspx?postid=3905833" rel="nofollow">编辑</a></div>

我们想要的信息,如2014-08-12 20:55,以及阅读量6221镶嵌在一串文字中。要想提取出类似这样的信息,我们很自然地想到了5.3节的正则表达式:


import re

pattern = "posted @ (\d{4}-[0-1]\d-{0-3}\d [0-2]\d:[0-6]\d) Vamei 阅读\((\d+)\) 评论"
for line in content:
    m = re.search(pattern, line)
    if m != None:
       print(m.group(1), m.group(2))

把两段程序合在一起,将打印出如下结果:


2016-03-23 14:08 9622
2016-03-23 07:12 1787
2016-03-22 11:20 1161
2015-05-11 13:08 5864
2014-10-01 12:50 5584
2014-09-01 05:41 9073
2014-08-20 10:48 6971
2014-08-16 11:51 5682
2014-08-13 22:43 7119
2014-08-12 20:55 6221

根据本章的内容,你还可以把日期转换成日期对象,进行更复杂的操作,如查询文章是星期几发表的。你还可以把上面的内容写入文件,长久的保存起来。可以看到,这个简单的程序中包含了不同方面的知识内容。编程的乐趣就在于此,通过对基本知识的组合,创造出新颖有趣的功能。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文