Hello,Spider!入门第一个爬虫程序

2024-03-16 12:28

本文主要是介绍Hello,Spider!入门第一个爬虫程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在各大编程语言中,初学者要学会编写的第一个简单程序一般就是“Hello, World!”,即通过程序来在屏幕上输出一行“Hello, World!”这样的文字,在Python中,只需一行代码就可以做到。我们把这第一个爬虫就称之为“HelloSpider”,见下例。

import lxml.html,requests
url = 'https://www.python.org/dev/peps/pep-0020/'
xpath = '//*[@id="the-zen-of-python"]/pre/text()'
res = requests.get(url)
ht = lxml.html.fromstring(res.text)
text = ht.xpath(xpath)
print('Hello,\n'+''.join(text))

运行结果:
在这里插入图片描述
代码分析:

  1. 导入模块
import lxml.html,requests

这里我们使用import导入了两个模块,分别是lxml库中的html以及python中著名的requests库。lxml是用于解析XML和HTML的工具,可以使用xpath和css来定位元素,而requests则是著名的Python HTTP库,其口号是“给人类用的HTTP”,相比于Python自带的urllib库而言,requests的有着不少优点,使用起来十分简单,接口设计也非常合理。实际上,对Python比较熟悉的话就会知道,在Python 2中一度存在着urllib, urllib2, urllib3, httplib, httplib2等一堆让人易于混淆的库,可能官方也察觉到了这个缺点,Python 3中的新标准库urllib就比Python 2好用一些。曾有人在网上问道“urllib, urllib2, urllib3的区别是什么,怎么用”,有人回答“为什么不去用requests呢?”,可见requests的确有着十分突出的优点。同时也建议读者,尤其是刚刚接触网络爬虫的人采用requests,可谓省时省力。

  1. 定义变量
url = 'https://www.python.org/dev/peps/pep-0020/'
xpath = '//*[@id="the-zen-of-python"]/pre/text()'

这里我们定义了两个变量,Python不需要声明变量的类型,url和xpath会自动被识别为字符串类型。url是一个网页的链接,可以直接在浏览器中打开,页面中包含了Python之禅的文本信息。xpath变量则是一个xpath路径表达式,我们刚才提到,lxml库可以使用xpath来定位元素,当然,定位网页中元素的方法不止xpath一种,以后我们会介绍更多的定位方法。

  1. re get 数据
res = requests.get(url)

使用了requests中的get方法,对url发送了一个HTTP GET请求,返回值被赋值给res,于是我们便得到了一个名为res的Response对象,接下来就可以从这个Response对象中获取我们想要的信息。

  1. 处理html
ht = lxml.html.fromstring(res.text)

lxml.html是lxml下的一个模块,顾名思义,主要负责处理HTML。fromstring方法传入的参数是res.text,即刚才我们提到的Response对象的text(文本)内容。在fromstring函数的doc string中(文档字符串,即此方法的说明)说道,这个方法可以“Parse the html, returning a single element/document.”即fromstring根据这段文本来构建一个lxml中的HtmlElement对象。

  1. 输出
text = ht.xpath(xpath)
print('Hello,\n'+''.join(text))

这两行代码使用xpath来定位HtmlElement中的信息,并进行输出。text就是我们得到的结果,“.join()”是一个字符串方法,用于将序列中的元素以指定的字符连接生成一个新的字符串。因为我们的text是一个list对象,所以使用‘’这个空字符来连接。
如果不进行这个操作而直接输出:程序会报错,出现‘TypeError: Can’t convert ‘list’ object to str implicitly’这样的错误。当然,对于list序列而言,我们还可以通过一段循环来输出其中的内容。

思考
通过刚才这个十分简单的爬虫示例,我们不难发现,爬虫的核心任务就是访问某个站点(一般为一个URL地址)然后提取其中的特定信息,之后对数据进行处理(在这个例子中只是简单地输出)。当然,根据具体的应用场景,爬虫可能还需要很多其他的功能,比如自动抓取多个页面、处理表单、对数据进行存储或者清洗等等。
其实,如果我们只是想获取特定网站所提供的关键数据,而每个网站都提供了自己的API (应用程序接口,Application Programming Interface),那么我们对于网络爬虫的需求可能就没有那么大了。毕竟,如果网站已经为我们准备好了特定格式的数据,只需要访问API就能够得到所需的信息,那么又有谁愿意费时费力地编写复杂的信息抽取程序呢?现实是,虽然有很多网站都提供了可供普通用户使用的API,但其中很多功能往往是面向商业的收费服务。另外,API毕竟是官方定义的,免费的格式化数据不一定能够满足我们的需求。掌握一些网络爬虫编写,不仅能够做出只属于自己的功能,还能在某种程度上拥有一个高度个性化的“浏览器”,因此,学习爬虫相关知识还是很有必要的。

这篇关于Hello,Spider!入门第一个爬虫程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/815493

相关文章

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

poj 2104 and hdu 2665 划分树模板入门题

题意: 给一个数组n(1e5)个数,给一个范围(fr, to, k),求这个范围中第k大的数。 解析: 划分树入门。 bing神的模板。 坑爹的地方是把-l 看成了-1........ 一直re。 代码: poj 2104: #include <iostream>#include <cstdio>#include <cstdlib>#include <al

MySQL-CRUD入门1

文章目录 认识配置文件client节点mysql节点mysqld节点 数据的添加(Create)添加一行数据添加多行数据两种添加数据的效率对比 数据的查询(Retrieve)全列查询指定列查询查询中带有表达式关于字面量关于as重命名 临时表引入distinct去重order by 排序关于NULL 认识配置文件 在我们的MySQL服务安装好了之后, 会有一个配置文件, 也就

EMLOG程序单页友链和标签增加美化

单页友联效果图: 标签页面效果图: 源码介绍 EMLOG单页友情链接和TAG标签,友链单页文件代码main{width: 58%;是设置宽度 自己把设置成与您的网站宽度一样,如果自适应就填写100%,TAG文件不用修改 安装方法:把Links.php和tag.php上传到网站根目录即可,访问 域名/Links.php、域名/tag.php 所有模板适用,代码就不粘贴出来,已经打