网络爬虫理解学习笔记(一)

1. 网络爬虫的认识

  网络爬虫是自动从互联网定向或不定向地采集信息地一种程序工具。网络爬虫分为很多类别,常见的有批量型网络爬虫、增量型网络爬虫(通用爬虫)、垂直网络爬虫(聚焦爬虫)。

2.网络爬虫的工作原理

通用爬虫:首先给定初始URL,爬虫会自动获取这个URL上的所有URL并将已经在爬取的地址存放在已爬取列表中。将新的URL放在队列并依次读取新的URL,依次判读是否满足所设置的停止获取的条件。

聚焦爬虫:首先定义一个文件(对要抓取目标的定义),爬取获取的初始的URL,并获得当前页面新的URL,并将已经爬取过的地址放在已爬取列表。设置过滤器将不需要的URL过滤掉,剩下的放在队列里并依次爬取,根据权重的计算判断爬取目标的先后顺序,根据设定的停止条件进行判断,若果满足,则停止。

两者总体上很相似,区别在于通用爬虫爬取的目标很广泛而聚焦爬虫则爬取特定的目标。

3.正则表达式

3.1一些定义

正则表达式:正则表达式是一种进行数据筛选的表达式。可以通过正则表达式从庞大的数据中提取出我们需要的、关注的、有价值的信息。在Python中是re模块,系统自带。

原子:原子是正则表达式的最基本的组成单位,每个正则表达式中至少要包含一个原子。原子是由所有那些未显示指定为元字符的打印和非打印字符组成,常见的原子类型有:

    a.普通字符作为原子。例如:abcdefg·····

    b.非打印字符作为原子。例如:\n(换行符)、\t(制表符)

    c.通用字符作为原子。例如:\w(字母、数字、下划线)、\W(除字母、数字、下划线)、\d(十进制数字)、\D(除十进制数字   )、\s(空白字符)、\S(除空白字符)

    d.原子表作为原子。若在原子表中加符号^则表示非的意思,除了原子表中的都匹配。

    e.特殊字符和元字符作为原子。元字符就是具有特殊含义的字符。如  .   :匹配除换行符以外的任意一个字符。^:匹配字符串开始的位置(注意区别于原子表)。$:匹配结束位置。*:匹配前面出现1次,0次或者多次。?:匹配出现1次或者0次。+:匹配出现1次或者多次。{n}:前面这个原子恰好出现n次。[n,m]:至少出现n次,最多出现m次。[n,]:最少出现n次。| :模式选择符或。():模式单元。

3.2模式修正符

模式修正符:可以在不改变正则表达式的情况下,通过模式修正符改变正则表达式的含义,从而实现一些匹配结果的调整等功能。

I:匹配时忽略大小写

M:多行匹配

L:本地化识别匹配

U:Unicode

S:让 . 匹配包括换行

3.3贪婪模式与懒惰模式

贪婪模式:其核心就是尽可能多的匹配。

例如:

str='dkjspdjskdpsdsaff'
pat='d.*p'
rest=re.search(pat,str,re.I)
print(rest)

 结果为:<re.Match object; span=(0, 11), match='dkjspdjskdp'>,会尽可能多的匹配d之后和p之前的字符。

懒惰模式:其核心就是尽可能少的匹配。

例如:

import re
string='dsdfsfdggfslsadadsffdg'
pat='d.*?f'
rst=re.search(pat,string,re.I)
print(rest)

结果为:<re.Match object; span=(0, 4), match='dsdf'>

注意:其中 ? 是懒惰模式的标识。

总结:懒惰模式相对于贪婪模式来说更加精准!

3.4正则表达式函数

正则表达式函数有re.match()、re.search()、re.compile(全局匹配函数)、re.sub()函数,正则表达式本身无任何功能,目的是为了实现匹配,而正则表达式函数则是实现具体的功能。

re.match():只能从头开始匹配,如果不是从头开始则不能匹配。只提取一个结果。

re.search():匹配信息并且查找出来。可以从任意位置开始匹配。只提取一个结果。

re.compile(全局匹配函数):把一堆数据中与匹配项匹配的所有数据提取出来。

3.5正则表达式的实际应用

匹配网站和网址:

从<a href='http://www.baidu.com'>百度</a>中提取:

string='<a href=\'http://www.baidu.com\'>百度</a>'
pat='[a-zA-Z]+://[^\s]*[.com|.cn]'
rst=re.compile(pat).findall(string)
print(rst)

#结果为:['http://www.baidu.com']

 匹配电话号码:

str='dfsdfs011-254521352135sdasd545311310sdsad07770002-13541354353453sdsa'
pat='\d{4}-\d{7}|\d{3}-\d{8}'
rst=re.compile(pat).findall(str)
print(rst)



#结果为:['011-25452135', '0002-1354135']

 

4.简单的爬虫编写

仅仅做一个简单的爬虫,非常容易写,可以直接使用urllib模块。格式如下:

import urllib.request
data=urllib.request.urlopen('网址').read().decode('utf-8')#爬取是以文件形式,所以需要写上read()
#所有信息都已经保存到了data里面

通过这样便可以实现一个简单的爬虫。提取信息时候,如果数据类型不匹配,一般可以使用decode.('utf-8')进行转换。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值