Python爬虫数据提取方法有哪些?

开课吧小一2021-06-09 11:10

点赞
有用
分享分享

    数据分析师在做数据分析工作的时候,不仅会使用良好地方式方法,同时还会使用Python开发技术,为了能够顺利完成数据分析工作,需要明白Python爬虫数据提取方法有哪些。

Python爬虫数据提取方法有哪些?

    通过爬虫抓取到的内容,需要提取出有用的东西,这一步就是数据提取或者数据清洗,内容一般分为两部分,非结构化的数据和结构化的数据。

    非结构化数据:先有数据,再有结构,比如文本、电话号码、邮箱地址(利用正则表达式处理)、HTML文件(利用正则、XPath、CSS选择器)。

    结构化数据:先有结构、再有数据,比如JSON(JSONPath)/XML(Xpath/正则等)。不同类型的数据,我们需要采用不同的方式来处理。

    实际上爬虫一共就四个主要步骤:

    明确目标(要知道你准备在哪个范围或者网站去搜索);

    爬(将所有的网站的内容全部爬下来);

    取(去掉对我们没用处的数据);

    处理数据(按照我们想要的方式存储和使用);

Python爬虫数据提取方法有哪些?

    什么是正则表达式?

    正则表达式,又称规则表达式,通常被用来检索、替换那些符合某个模式(规则)的文本。

    正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

    在任何编程语言中都有正则表达式,JS、JAVA、C#等等多有,Python自1.5版本起增加了re模块,re模块使Python语言拥有全部的正则表达式功能。

    re模块使用步骤:

    在Python中,我们可以使用内置的re模块来使用正则表达式。

    有一点需要特别注意的是,正则表达式使用对特殊字符进行转义,所以如果我们要使用原始字符串,只需加一个r前缀,示例:r'testt.tpython'

    re模块的一般使用步骤如下:

    1、使用compile()函数将正则表达式的字符串形式编译为一个Pattern对象;

    2、通过Pattern对象提供的一系列方法对文本进行匹配查找,获得匹配结果,一个Match对象。

    3、最后使用Match对象提供的属性和方法获得信息,根据需要进行其他的操作。

import re
str="abcdefabcdef" #待匹配的字符串
m=re.compile("a") #编译正则表达式,第一个参数是表达式字符串,第二个参数是标志位,比如re.I 匹配不对大小写敏感,re.S等等
result=m.findall(str)
print(result) #输出["a","a"]

    具体的正则表达式如何编写,其实就是根据上图的元字符进行组合,匹配你要的结果,

    小练习1:找出字符串中的数字。d表示0-9+表示匹配前一个字符1次或无限次。

import re
str="a11b22c3"
m=re.compile("\d+")
print(m.findall(str)) #输出['11', '22', '3']

    小练习2:找出单词中包含oo的单词。

import re

str="1oo1 tina is a good girl ,she is cool"
m=re.compile("[a-z]oo[a-z]")
print(m.findall(str)) #输出['good', 'cool']

    大概知道了正则的书写方式以后,先来看后续的步骤,不要着急,编写正则是个积累的过程。

    compile()函数将正则表达式的字符串形式编译为一个Pattern对象,Pattern对象提供的一系列方法对文本进行匹配查找,来罗列下方法:

    m.search函数会在字符串内查找模式匹配,只要找到第一个匹配然后返回,如果字符串没有匹配,则返回None。

import re

str="1oo1 tina is a good girl ,she is cool"
m=re.compile("[a-z]oo[a-z]")
print(m.search(str)) #<_sre.SRE_Match object; span=(15, 19), match='good'>

    m.findall遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表。

import re

str="1oo1 tina is a good girl ,she is cool"
m=re.compile("[a-z]oo[a-z]")
print(m.findall(str)) #输出['good', 'cool']

    m.match()决定RE是否在字符串刚开始的位置匹配;

import re

str="aooz tina is a good girl ,she is cool"
m=re.compile("[a-z]oo[a-z]")
#str为待匹配的字符串,第一个参数是起始位置,第二个是字符串长度,从0开始,长度为6
print(m.match(str,0,6)) #<_sre.SRE_Match object; span=(0, 4), match='aooz'>

    m.split()按照能够匹配的子串将string分割后返回列表;

import re

str="aa1bb2cc3dd4"
m=re.compile("\d+")
# split(string[, maxsplit]),maxsplit 用于指定最大分割次数,不指定将全部分割
# list=m.split(str) #输出['aa', 'bb', 'cc', 'dd', '']
list=m.split(str,2) #输出['aa', 'bb', 'cc3dd4']
print(list)

    m.sub()使用re替换string中每一个匹配的子串后返回替换后的字符串。

import re
str="aa1bb2cc3dd4"
m=re.compile("\d+")
result=m.sub('*',str)
print(result) #输出aa*bb*cc*dd*

    以上就是小编为大家整理的“Python爬虫数据提取方法有哪些?”一文,更多相关信息尽在开课吧数据分析教程频道。

相关推荐:

2021大厂高频面试题精选,0元免费领

福利来袭,C++经典项目实战免费领取!

职场进阶必备,数据分析职业能力特训营

免责声明:本站所提供的内容均来源于网友提供或网络搜集,由本站编辑整理,仅供个人研究、交流学习使用。如涉及版权问题,请联系本站管理员予以更改或删除。
有用
分享