系列教程:
互联网金融爬虫怎么写-第一课 p2p网贷爬虫(XPath入门)
上一节课我们一起通过一个p2p网贷爬虫,深入了解了一下XPath以及其在最终实际使用中的写法。可以毫不夸张的说,对于写简单爬虫来说,最最重要的,就是使用好XPath,以及这一课要讲的正则表达式。
正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE)
正则表达式几乎出现在每一个编程语言中,有着极其广泛的应用,比如做网页的时候,判断用户输入的是否是邮箱这样的正则。正则表达式本身写法基本在各个语言中 都是一致的,不过调用方法可能略有不同,在我们教的爬虫中,正则表达式主要应用在界定列表url和内容url的格式上,就是什么url是列表url,什么 url是内容url,什么url直接丢弃掉。这样做主要是为了提高整个爬虫的爬取效率,防止爬虫在无关的url花费太长的时间,当然如果希望全网爬的话, 也可以不做设定。
对于手里有点闲钱的人来说,可能最常见的投资品就是股票了,虽然中国股票市场那叫一个变幻诡谲,妖兽频出。但依旧相对其他 流通性差,投资门槛高的投资产品来说,有着国家信用背书的股市依然是不二的投资选择。股票的数据很多地方都有,我们今天就通过雪球的行情中心,爬一下当天 各个上市公司的股票价格吧。
打开雪球行情中心:
哇,突然觉得这是我们教程最高大上的一次。首先,这个页面就可以作为一个不错的入口Url,因为有着挺多的连接,不过从效率来讲,虽然爬虫本身可以帮我们去做很多事情,但是最好还是直接找到列表url会更快一些。我们继续往里找,可以看到这样一个界面:
https://xueqiu.com/hq#exchange=CN&plate=1_1_0&firstName=1&secondName=1_1&type=sha&page=1
原谅我实在不懂股市,姑且就认为这个就是所有股票价格的列表,砖家勿喷~
好了,我们看下这个下一页规律
https://xueqiu.com/hq#exchange=CN&plate=1_1_0&firstName=1&secondName=1_1&type=sha&page=2
https://xueqiu.com/hq#exchange=CN&plate=1_1_0&firstName=1&secondName=1_1&type=sha&page=3
看着这种url的结构,发自内心想说:
好了,我们先根据这个连接来提取一下正则表达式,首先我们选中其中一个url,然后原封不动的写出来:
https://xueqiu.com/hq#exchange=CN&plate=1_1_0&firstName=1&secondName=1_1&type=sha&page=2
首先我们需要先把正则里面需要转义的字符进行转移,由于正则表达式中.代表任意字符,?代表指定字符出现0次或者1次,因此如果我们想匹配这两个字符本身的 时候一定要记得将他们转义,当然正则中还有很多其他字符需要转移,不过这两个字符是url中最常见的,也是大家最容易弄错的地方。
经过转义之后的字符串是这样的:
https://xueqiu\\.com/hq#exchange=CN&plate=1_1_0&firstName=1&secondName=1_1&type=sha&page=2
可以看到,这个url里面并没有?只有一个点,因此我们将点进行转移,而之所以要有两个转义符\\,是因为这一段文字需要写进字符串中,而字符串本身是需要 对\进行转义的。转义完成之后,就看一下不同url的共性,不同的url之间的共性是除了page后面的数字不一样,其他都是一样的,那没我们只需要对 page后面的数字改写成正则的形式,正则中提供了一些比较好用的替换符号,如\w代表数字和字母 \d代表数字,这两个是很常用的,另外也可以通过[0-5]这种形式来表示一个区间。这里我们其实就是一个1到多位的数字,因此将数字改写成\d+,同时 注意转义符在字符串中要再次转义,得到下面的字符串:
https://xueqiu\\.com/hq#exchange=CN&plate=1_1_0&firstName=1&secondName=1_1&type=sha&page=\\d+
最后,一个经验性的东西值得注意,一般来说https的网站都会支持http,甚至有的连接会写成http,因此这里为了程序的健壮性,最好将这段正则修改 一下兼容http的格式,修改的方式是我们允许s存在或者不存在,正则中提供了三个字符表示字符出现数量的区间,分别是?表示0或1次,+表示1或多 次,*表示0或多次。这里很明显的,我们应该使用?:
https?://xueqiu\\.com/hq#exchange=CN&plate=1_1_0&firstName=1&secondName=1_1&type=sha&page=\\d+
注意这个问号是正则自己的问号,并不需要转义。
这样我们就把列表页的url的正则表达式写出来了。
同样的方法,我们写出内容页的正则表达式:
https?://xueqiu\\.com/S/SH\\d{6}
这里的{6}表示有6位,当位数确定或者范围确定时,可以使用花括号的形式来表示。再次申明,由于本身股票知识匮乏,暂且认为所有代码都是6位的。
写到这里感觉已经离大功告成不远了,然而,当我们测试就可以发现,所有页面的url实际上都是由js生成的,通过ajax请求来的。前功尽弃啊,不过还好咱们还学到了东西。不要灰心,黎明就在最黑暗的时间之后。我们下一课就给大家讲一讲碰到这些个ajax请求该怎么办。
对爬虫感兴趣的童鞋可以加企鹅群讨论:342953471。
相关推荐
2. **正则表达式转换** - 字符转义:在正则表达式中,特殊字符需要通过反斜杠`\`进行转义,如`\.`表示匹配实际的点号,而不是任何字符。 - 常规字符到元字符的转换:例如,将`*`转换为`\*`,避免其被解释为量词。 ...
无论是处理日志文件、数据验证、文本转换还是网络爬虫中的URL提取等,正则表达式都能提供高效、精确的解决方案。而正则表达式之所以为大多数人所知甚少,主要是因为缺乏质量高、易于理解的学习资源。不少教程或书籍...
- **网页抓取**:在网页源码中使用正则表达式查找特定信息,辅助网络爬虫工作。 - **文本替换**:使用`re.sub()`可以批量替换字符串中的特定模式,实现格式化和转换。 6. **进阶话题** - **正则表达式性能优化**...
正则表达式(Regular Expression,简称regex)是用于匹配字符串的一种模式,它在IT行业中扮演着重要的角色,尤其是在数据处理、文本分析、爬虫技术等领域。正则表达式通过使用预定义的字符集和特殊符号,可以高效地...
第五章“字符串与正则表达式”深入探讨了这一关键主题,旨在帮助初学者和有经验的开发者更好地理解和使用字符串及正则表达式。 **5.1 字符串基础** 1. **字符串表示**:Python中的字符串可以由单引号或双引号包围...
- `re.search(pattern, string)`:扫描整个字符串,找到第一个符合正则表达式的部分,并返回匹配对象。 - `re.findall(pattern, string)`:返回一个列表,包含所有匹配的子串。 - `re.sub(pattern, repl, string)...
本资源“源码(精通正则表达式&实战正则表达式)”专注于JavaScript环境下的正则表达式学习,通过一系列视频教程和配套源码,帮助开发者提升对正则表达式的理解和应用能力。 首先,"精通正则表达式五部视频"可能涵盖...
正则表达式是一种强大的文本处理工具,用于模式匹配、搜索、替换等操作,在软件开发、数据处理、网络爬虫等领域有着广泛的应用。在项目中直接使用正则表达式可以极大地提高代码的效率和可读性。以下是对给定文件中的...
在这个名为“网络爬虫-正则表达式测试”的主题中,我们将深入探讨正则表达式在网络爬虫中的应用,以及如何利用相关工具进行测试。 正则表达式(Regular Expression)是一种模式匹配语言,由特殊字符组成的字符串,...
2. **验证和调试**:用户可以输入正则表达式,然后在工具中测试其是否能正确匹配目标字符串。这包括单个字符串的测试和多字符串集的批量验证,便于调试和优化正则表达式。 3. **解释器**:工具通常会提供正则表达式...
掌握正则表达式对于IT专业人士至关重要,因为它们在数据提取、文本分析、网络爬虫和许多其他领域都有广泛应用。例如,你可以使用正则表达式在网页源代码中提取特定信息,或者在日志文件中查找特定模式。通过熟练使用...
正则表达式,全称Regular Expression,是一种强大的文本处理工具,尤其在数据挖掘、文本匹配、搜索替换等方面有着广泛的应用。在IT行业中,熟练掌握正则表达式是提高工作效率的关键技能之一,尤其对于程序员和数据...
这个表达式的意思是:以1开头,第二位是3到9之间的数字,后面跟着9个任意数字。 邮箱地址的正则表达式相对复杂,因为它允许包含字母、数字、点、下划线、减号以及@符号和点号(.)组成的域名部分。一个基本的邮箱...
3. **数据提取**:在日志分析、网页爬虫等场景下,正则表达式可以帮助我们快速抽取关键信息。 4. **文本处理**:在自动化脚本中,正则表达式可用于处理文本,如切割字符串、去除空白字符等。 The Regulator作为一...
2. **实时匹配反馈**:工具会立即显示正则表达式与输入文本的匹配结果,通常以高亮或突出显示的方式,让用户直观地看到匹配的文本部分。 3. **多模式匹配**:支持各种匹配模式,如全局匹配(查找所有出现的匹配项)...
10.1_初识正则表达式|正则表达式与JSON|Python3.8入门_&_进阶_&_原生爬虫实战完全解读
在"超好用的正则表达式可视化调试工具"中,用户可以输入自定义的正则表达式和测试文本,查看匹配结果,还可以调整正则引擎的行为,比如是否开启大小写敏感、多行模式等。通过这种方式,用户可以在不同场景下测试正则...
在这个30分钟入门教程中,我们将深入探讨正则表达式的基础概念、语法和常见用法,帮助你快速掌握这一强大的工具。 一、基础概念 1. 元字符:在正则表达式中,一些特殊字符如`.`、`*`、`+`、`?`、`^`、`$`、`|`、`()...
在"python零基础学习篇数据爬虫技巧-4正则表达式.zip"这个压缩包中,很显然,我们将深入探讨如何利用Python的正则表达式库`re`来进行数据抓取。 首先,让我们理解正则表达式的概念。正则表达式是由字符和特殊符号...