pythonwhile爬虫教程_Python 爬虫从入门到进阶之路(十一)

之前的文章我们介绍了一下 Xpath 模块,接下来我们就利用 Xpath 模块爬取《糗事百科》的糗事。

之前我们已经利用 re 模块爬取过一次糗百,我们只需要在其基础上做一些修改就可以了,为了保证项目的完整性,我们重新再来一遍。

b29ccaf108d464b1dcffcfef9a06ef49.png

我们通过 Xpath Helper 的谷歌插件经过分析获取到我们想要的内容为: //div[@class="content"]/span[1]

9120cded375984b2bac3a46760f6bb75.png

然后我们就可以通过 text() 来获取里面的内容了, //div[@class="content"]/span[1]/text()

1 importurllib.request2 from lxml importetree3 importssl4

5 #取消代理验证

6 ssl._create_default_https_context =ssl._create_unverified_context7

8 url = "https://www.qiushibaike.com/text/page/1/"

9 #User-Agent头

10 user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36'

11 headers = {'User-Agent': user_agent}12 req = urllib.request.Request(url, headers=headers)13 response =urllib.request.urlopen(req)14 #获取每页的HTML源码字符串

15 html = response.read().decode('utf-8')16 #解析html 为 HTML 文档

17 selector =etree.HTML(html)18 content_list = selector.xpath('//div[@class="content"]/span[1]/text()')19 print(content_list)

输出结果为:

1e160ea2a2bd7a9e18e63390fa79a8cd.png

从上面的输出结果可以看出我们已经拿到了我们想要的数据,并且是一个列表类型,我们对列表进行操作扥别拿到糗事再存储到本地即可。

1 for item initem_list:2 item = item.replace("\n", "")3 self.writePage(item)

上面的代码中 item_list 即为我们上面所获取到的 content_list 列表,在之前通过 re 模块获取数据时通过对列表的内容分析,我们发现有 ,查看全文,
,\n 等多余内容,而通过 Xpath 只有 \n 为多余,我们通过 replace 方法将其转为空,剩下的就是我们想要的内容了,接下来就是存储到本地即可了。

上面就可以实现一个获取 糗事百科 的糗事的简单爬虫,但是只能爬取单个页面的内容,通过分析 url 我们发现 https://www.qiushibaike.com/text/page/1/ 中最后的 1 即为页码,我们就可以根据这个页码逐一爬取更多页面的内容,最终的代码如下:

1 importurllib.request2 from lxml importetree3 importssl4

5 #取消代理验证

6 ssl._create_default_https_context =ssl._create_unverified_context7

8

9 classSpider:10 def __init__(self):11 #初始化起始页位置

12 self.page = 1

13 #爬取开关,如果为True继续爬取

14 self.switch =True15

16 defloadPage(self):17 """

18 作用:打开页面19 """

20 url = "https://www.qiushibaike.com/text/page/" + str(self.page) + "/"

21 #User-Agent头

22 user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36'

23 headers = {'User-Agent': user_agent}24 req = urllib.request.Request(url, headers=headers)25 response =urllib.request.urlopen(req)26 #获取每页的HTML源码字符串

27 html = response.read().decode('utf-8')28 #解析html 为 HTML 文档

29 selector =etree.HTML(html)30 content_list = selector.xpath('//div[@class="content"]/span[1]/text()')31 #调用dealPage() 处理糗事里的杂七杂八

32 self.dealPage(content_list)33

34 defdealPage(self, item_list):35 """

36 @brief 处理得到的糗事列表37 @param item_list 得到的糗事列表38 @param page 处理第几页39 """

40 for item initem_list:41 item = item.replace("\n", "")42 self.writePage(item)43

44 defwritePage(self, text):45 """

46 @brief 将数据追加写进文件中47 @param text 文件内容48 """

49 myFile = open("./qiushi.txt", 'a') #追加形式打开文件

50 myFile.write(text + "\n\n")51 myFile.close()52

53 defstartWork(self):54 """

55 控制爬虫运行56 """

57 #循环执行,直到 self.switch == False

58 whileself.switch:59 #用户确定爬取的次数

60 self.loadPage()61 command = input("如果继续爬取,请按回车(退出输入quit)")62 if command == "quit":63 #如果停止爬取,则输入 quit

64 self.switch =False65 #每次循环,page页码自增1

66 self.page += 1

67 print("爬取结束!")68

69

70 if __name__ == '__main__':71 #定义一个Spider对象

72 qiushiSpider =Spider()73 qiushiSpider.startWork()

最终会在本地添加一个 qiushi.txt 的文件,结果如下:

3d77b67fe6ff32903a717c33f174fcd5.png

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

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

相关文章

python中fd是什么意思_python里fd是什么意思

文件描述字(file descriptor,fd)是系统中用来唯一记录当前已经打开的文件的标识号,fd是一个整数。除了file对象外,Python还提供对fd的操作,对fd的操作更加底层,fd和Python中的file对象是不同的概念。在介绍file对象时已…

show index mysql_MySQL SHOW INDEX语法的实际应用

以下的文章主要描述的是MySQL SHOW INDEX语法的实际操作用法以及其实际查看索引状态(语法)的具体内容的描述,如果你对这一技术,心存好奇的话,以下的文章将会揭开它的神秘面纱。SHOW INDEX FROM tbl_name [FROM db_name]MySQL SHOW INDEX会返回…

阿联酋esma认证怎么做_百度爱采购企业认证是怎么做的?这些你要知道!

入驻百度爱采购的企业可以获得认证标识,这个标识是企业品牌树立的重要表现,在产品展示页面和百度首页搜索企业名称都有企业信息的醒目展示,并且可以直接跳转到企业店铺,为企业带来流量的同时,还能进行品牌的宣传。百度…

Java this关键字详解

this 关键字是 Java 常用的关键字,可用于任何实例方法内指向当前对象,也可指向对其调用当前方法的对象,或者在需要当前类型对象引用时使用。 this.属性名 大部分时候,普通方法访问其他方法、成员变量时无须使用 this 前缀&#…

zabbixdocker里的mysql_基于Docker安装与部署Zabbix

今天测试了一天的Zabbix-Docker,部署起来确实方便,就需要在安装了Docker的linux系统中输入以下命令就可以了。1.安装MysqL数据库,启动一个空的MysqL服务器实例docker run Cname zabbix-DB -t \-e MysqL_DATABASE”zabbix” \-e MysqL_USER”zabbix” \-e…

Java创建对象详解

对象是对类的实例化。对象具有状态和行为,变量用来表明对象的状态,方法表明对象所具有的行为。Java 对象的生命周期包括创建、使用和清除, Java 语言中创建对象分显式创建与隐含创建两种情况。 显式创建对象 对象的显式创建方式有 4 种。 1. 使用 new …

python matplotlib模块教程_Python中的Matplotlib模块入门教程

1 关于 Matplotlib 模块Matplotlib 是一个由 John Hunter 等开发的,用以绘制二维图形的 Python 模块。它利用了 Python 下的数值计算模块 Numeric 及 Numarray,克隆了许多 Matlab 中的函数, 用以帮助用户轻松地获得高质量的二维图形。Matplot…

人脸离线识别模块_人脸消费机离线刷脸如何实现?

随着越来越多刷卡刷脸一卡通的设备出现。大家在享受一卡通的便利的同时。也在考虑人脸消费机的基本功能和安全属性,人脸消费机,是指人脸在消费访客管理方面的相关。在人脸刷脸进行消费的时候是一下几个阶段1.人脸特征提取首先得先让人脸消费机看到你的脸…

Java匿名对象

创建对象的格式如下: 类名称 对象名 new 类名称();每次 new 都相当于开辟了一个新的对象,并开辟了一个新的物理内存空间。如果一个对象只需要使用唯一的一次,就可以使用匿名对象,匿名对象还可以作为实际参数传递。 匿名对象就是…

mysql中的钱null_MySQL数据库中null的知识点总结

在mysql数据库中,null是一个经常出现的情况,关于mysql中的null,有哪些注意事项呢?下面简单总结归纳下,后续会不断补充。1. is null首先判断数据库中某一列的值是否为null,不能用等于来判断,必须…

Java访问对象的属性和行为

每个对象都有自己的属性和行为,这些属性和行为在类中体现为成员变量和成员方法,其中成员变量对应对象的属性,成员方法对应对象的行为。 在 Java 中,要引用对象的属性和行为,需要使用点(.)操作符…

junit版本_Junit-jupiter-api 和 junit-jupiter-engine 的区别是什么

我们都知道 JUnit 是用于进行单元测试的。但是 Junit 5 和 Junit 4 的区别比较大。 很多时候你可能会遇到 Junit 引擎配置错误导致测试无法进行。junit-jupiter-api JUnit 5 Jupiter API 的测试,你需要使用这个 API 来写测试和进行扩展。junit-jupiter-engine JUnit…

Java对象的销毁

对象使用完之后需要对其进行清除。对象的清除是指释放对象占用的内存。在创建对象时,用户必须使用 new 操作符为对象分配内存。不过,在清除对象时,由系统自动进行内存回收,不需要用户额外处理。 Java 语言的内存自动回收称为垃圾…

mysql数据库基础简介_MySql数据库基础之数据库简介及安装

MySql数据库简介:众所周知,MySql数据库是一款开源的关系型数据库,在Web应用方面,MySql是最好的、最流行的RDBMS(Relational Database Management System,关系型数据库管理系统)应用软件。MySql的4大特点:1.MySql是开源…

Java用户修改密码

每一个应用系统都离不开用户模块。用户模块除了提供登录之外,还允许用户查看自己的信息和进行修改。本实例将创建一个用户类,然后再创建一个测试类调用用户类,实现修改密码的功能。 本实例的用户类非常简单,仅包含用户名和密码两…

python视频提取音频_python脚本实现mp4中的音频提取并保存在原目录

一段把mp4中的音频提取为mp3并保存在原目录的python脚本需要提前安装好ffmpeg 转换为单线程,耗时较长#!/usr/bin/env python3# -*- coding: utf-8 -*-# Time : 2020/2/26 17:36# Author : CuiFeiran# FileName : tool.py# Software : PyCharm# email :cui2025126.co…

mysql数据库自动化脚本备份_mysql 自动化脚本备份

#!/bin/sh### 备份工具:## percona-xtrabackup-2.2.6#### 备份策略:## (1)、每天凌晨04:20点进行全量备份一次;## (2)、每隔1小时增量备份一次;###PATH/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin## …

Java访问控制修饰符详解

在 Java 语言中提供了多个作用域修饰符,其中常用的有 public、private、protected、final、abstract、static、transient 和 volatile,这些修饰符有类修饰符、变量修饰符和方法修饰符。 在实际生活中,如果要获取某件物品,与其直接…

为资产分类定义折旧范围_RFID固定资产管理系统方案

项目介绍随着经济的不断发展,企业的规模日益壮大,固定资产管理作为企业资产管理最要的一部分,一直是企业关注的难题。由于固定资产具有价值高,使用周期长、使用地点分散的特点、相关责任人员多,在实际工作中不容易做到…