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毕竟是官方定义的,免费的格式化数据不一定能够满足我们的需求。掌握一些网络爬虫编写,不仅能够做出只属于自己的功能,还能在某种程度上拥有一个高度个性化的“浏览器”,因此,学习爬虫相关知识还是很有必要的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/748341.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springcloud五大组件:Eureka:注册中心、Zuul:服务网关、Ribbon:负载均衡、Feign:服务调用、Hystix:熔断器

你提到的这些组件都是Spring Cloud生态系统中非常关键和常用的组件。但是,关于这些组件的命名,有一点需要更正: Eureka 应该是 Eureka 或者 Eureka Server:Eureka是Netflix开源的一个服务发现组件,它本身是一个基于RE…

【Git】Github 上commit后,绿格子contribution却不显示?不知道怎么弥补?解决方法在这里

github 上commit后,绿格子(contribution)却不显示 问题描述 今天一直在github上面commit代码,但是github中并没有显示自己的contribution(没有绿色的格子),全是空白,网上一查是因为…

免费分享一套SpringBoot+Vue自习室(预约)管理系统,帅呆了~~

大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue自习室预约)管理系统,分享下哈。 项目视频演示 【免费】SpringBootVue自习室预约(预约)管理系统 Java毕业设计_哔哩哔哩_bilibili【免费】SpringBootVue自习室预约(预约)管理系统…

大语言模型(LLM)Token 概念

1. 概念: Token概念:在大型语言模型中,Token是对输入文本进行分割和编码时的最小单位。它可以是单词、子词、字符或其他形式的文本片段。 2. 分类: 词级Token(Word-level Tokens):将文本分割…

Java项目企业设备管理系统

java项目企业设备管理系统javaweb项目ssm框架项目 运行环境:idea/eclipse tomcat jdk mysql navicat 系统用户分为员工和管理员两类用户。两类用户都可以进行系统的登录,虽然进入的系统主页结构相似,但是在功能上有不同。员工的密码可以自己进入系统后…

【目标检测-数据集准备】DIOR转为yolo训练所需格式

【目标检测】DIOR遥感影像数据集,转为yolo系列模型训练所需格式。 标签文件位于Annotations下,格式为xml,yolo系列模型训练所需格式为txt,格式为 class_id x_center,y_center,w,h其中,train,text&#xff…

企业微信托管集成语聚AI,做AI智能客服助手,实现精准回答用户问题、创建群组自动化场景

场景描述 当前商业环境下,企业正面临着为客户提供高效而精确服务的迫切需求,这是提升客户满意度和增强品牌忠诚的关键。随着互联网时代的到来,无论是企业还是个人,都在努力加强与顾客的连接和互动,以期达到卓越的用户…

Python笔记|字符串的转义

重新梳理一遍python的基础知识 除了数字,Python 还可以操作字符串。字符串有多种表现形式,用单引号(……)或双引号("……")标注的结果相同 。反斜杠 \ 用于转义: >>>spam e…

摩尔定律对于计算机行业有什么重要意义?

摩尔定律对计算机行业有着极其深远的影响,主要体现在以下几个方面: 技术进步预期: 摩尔定律提供了一个指导性的预测模型,表明处理能力大约每两年翻一番。这个预期帮助行业对未来的技术发展和市场需求进行规划。 硬件性能提升&…

java抽象类的作用及解析

在 Java 中,抽象类是一种特殊的类,它可以用于定义一些抽象的方法和属性,这些方法和属性可能在子类中有不同的实现。 抽象类的主要作用包括: 提供抽象方法:抽象类可以包含一些没有具体实现的抽象方法,这些…

3 数据分析--Numpy

Numpy:用于存储和处理大型矩阵,比python自身的嵌套列表结构要高校很多 anaconda:是一个开源的python发行版本,包括conda,python以及一大堆安装好的工具包 ipython 开发环境,解释器 jupyter notebook是编辑…

rust最新版本安装-提高下载速度

1)拉取依赖包将安装脚本输出到本地rust.sh脚本中 curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs > rust.sh 2)更新rust.sh脚本内容、修改源 # 编辑rust.sh vi rust.sh # 将RUSTUP_UPDATE_ROOT的值替换为: RUSTUP_UPDATE_ROOT&q…

SpringBoot3框架,Web开发(上)

web场景,默认配置: 包含了 ContentNegotiatingViewResolver 和 BeanNameViewResolver 组件,方便视图解析默认的静态资源处理机制: 静态资源放在 static 文件夹下即可直接访问自动注册了 Converter,GenericConverter,Formatter组件…

JVM-5

1.选择垃圾收集器 如果你的堆大小不是很大(比如 100MB ),选择串行收集器一般是效率最高的。 参数: -XX:UseSerialGC 。如果你的应用运行在单核的机器上,或者你的虚拟机核数只有单核,选择串行收集器依然是合…

论文阅读:FCB-SwinV2 Transformer for Polyp Segmentation

这是对FCBFormer的改进,我的关于FCBFormer的论文阅读笔记:论文阅读FCN-Transformer Feature Fusion for PolypSegmentation-CSDN博客 1,整体结构 依然是一个双分支结构,总体结构如下: 其中一个是全卷积分支&#xff…

数据结构之链式二叉树

当我们初步了解二叉树后 我们就可以进一步去深入学习二叉树了 1.链式二叉树的遍历 这里我们先去定义链式二叉树的结构 分为两个指针 一左一右 他们分别指向左子树和右子树 typedef int BTDataType;typedef struct BinaryTreeNode {BTDataType data;struct BinartTreeNod…

【Pandas】详细介绍

Pandas讲解 Pandas是一个开源的、BSD许可的库,为Python编程语言提供高性能的、易于使用的数据结构和数据分析工具。通常,Pandas被广泛应用于各种数据分析、数据科学、统计建模等任务。Pandas的名称来自于"Panel Data"和"Python Data Ana…

功能包是 ROS 中最基本的软件组织单元,它可以包含节点、消息、服务、动作、参数配置文件、启动文件以及其他 ROS 资源

文章目录 ROS(Robot Operating System)功能包功能包名在 CMakeLists.txt 和 package.xml 中一定要完全相同 ROS(Robot Operating System)功能包 ROS(Robot Operating System)功能包是用于组织、构建和管理…

动态IP和静态IP

与静态 IP 地址不同,动态 IP 地址会定期更改。让我们来分析一下: 1. IP 地址基础知识: * IP 地址是一个数字标签,用于唯一标识网络上的每个设备。 * 当设备通过网络通信时,数据会在它们之间来回传输。每个数据包都标有…

【设计模式】一、设计模式概述

文章目录 一、设计模式概述(一)设计模式是什么1. 设计模式的定义2. 设计模式的组成要素3、常用设计模式一览表 (二)设计模式的优点(用途)※ 本文小结 一、设计模式概述 (一)设计模式…