这篇博客是用来记录自己的Python爬虫学习历程
其实学个基础也不是很难就一些基础的语法
毕竟大一也学过Java有点基础学习基础起来倒是不会太大麻烦
但是学爬虫的时候还是比较麻烦
所幸认识一些学长学姐给我提供了一些学习的帮助
网络爬虫个人认为是用来批量爬取网页提取网页信息的(目前)当然目前爬虫也有着很多的麻烦,所以我们应该科学爬虫防止一些不好的事情发生(比如被网站封IP等)
爬虫分为多种==>有通用爬虫和聚焦爬虫两类爬虫的工作原理如下
具体就是流程图形式就不具体说明了
接下来是一个重点内容正则表达式
需要导入re模块Python自带
import re
学习正则表达式之前需要了解什么叫原子
原子类型:所有打印字符(a-z,A-Z,0-9,-,*,&@!()等)和非打印字符(换行、Tab键等)都可以作为原子
原子类型我记得有四类
1.通用字符,
\w 代表字母,数字,下划线
\W 代表除字母,数字,下划线
\d 代表十进制数字
\D 代表除十进制数字
\s 代表空白字符
\S 代表空白字符以外的东西
2.普通字符
就是一些普通的字符串之类的
3.非打印字符
一些\n\t之类
4.原子表
用[]括起来[a-zA-Z]表示全部英语字母
示范比如有一个[uwbsd]这样的原子表
那么在匹配的时候是在这几个字符的之间有任意一个都可以匹配成功
接下来是正则表达式中的元字符
就是正则表达式中具有特殊意义的字符比如重复n次前面的字符
. 除换行符外的任意字符
^ 起始位置(就是字符从首字符匹配如果无法匹配首字符就直接返回None)==>在原子表里面代表非(用^需要加[]来括起来)
$ 结束位置
* 出现0\1\多次
? 0次或者1次
+ 出现1次\多次
[n] 出现n次
[n,]最少出现n次
[n,m]最少n次最多m次
| 模式选择符
() 模式单元就是需要提取的地方可以用()来括起来标识方便提取自己需要的东西不然可能提取出来的是包括一些html的标签标签
模式修正符可以作为search的参数
可以在不改变正则表达式的情况下通过模式修正符改变正则表达式的含义,从而实现一些匹配结果的调整
(常用的后面用斜体表示标识)
I 匹配的时候忽略大小写
M 多行匹配
L 本地化识别匹配
U UNICODE编码
S 让.匹配换行符
接下来是贪婪模式和懒惰模式
两种模式的核心
贪婪模式的核心是尽可能多的匹配满足后还是寻找可以匹配的结果 .*默认情况下这个就是贪婪模式
懒惰模式的核心是尽可能少的匹配满足就结束 .*? 默认懒惰模式
下面是正则表达式的一些常用方法
search(正则表达式,要匹配的字符串,[模式修正符])
match()=>和search差不多但是这个是从头开始匹配的就是那个子字符串必须是母字符串的开头位置
全局匹配函数findall(大字符串)
上面两个都只能匹配一个结果而使用了全局匹配函数会得到一个列表提取网页源代码中满足正则表达式的全部内容
全局匹配的格式重点
re.compile(正则表达式).findall(数据)
sub函数用于替换=>爬虫用的不多
一个实例匹配.com和.cn的网站
import re
String=“http://www.baidu.com”
zz = “[a-zA-Z]+://[^\n]+[.com|cn]”
“”"
因为[a-zA-Z]可以匹配任何字母可能是ftp什么的应用进程后面用+是代表出现多次 由于域名中不可能有换行符的出现所以可以[^\n]但是注意这边一定要加[]否则报错
“”"
sss = re.compile(zz).findall(String)
print(sss)
注意在提取网页内容的时候需要提取什么就加()===>括号内就是自己需要提取的内容否则会带html的标签
下面是一个简单爬虫的实例=>先对网页爬取,然后对网页中出现的网页名字进行提取(emm将就着看吧第一次写不是很会调)
import urllib.request,re #以文件的形式爬取所以需要.read()来返回内容 data=urllib.request.urlopen("https://read.douban.com/provider/all").read().decode('utf-8') #把编码方式转换成utf-8不然可能乱码调用decode()函数转换 print("提取页面出版社名字") par = '<div class="name">([^\s]*?)</div>' s = re.compile(par).findall(data) for ss in s: print(ss)
明天将带来urllib基础的时候其实上面是实例已经用到了urllib的部分内容