爬虫基础知识
第一章和第二章是课程简介和环境安装,这个比较简单就不记录了。
- 技术选型
scrapy 可以加入requests和beautifulsoup
scrapy基于twisted,性能好
方便扩展,有很多内置功能
内置的css和xpath selector很方便,速度快
- 爬虫能做什么?
搜索引擎:百度 垂直领域搜索引擎(只爬某领域)
推荐引擎:今日头条
机器学习的数据样本
数据分析(金融数据分析) 舆情分析
- 正则表达式
比如: 一天前中提取出1
- :代表以该字符为开头。如b就是b为开头。
- .: 代表任意一个字符。如^b.就是b开头后面一个字母任意
- : 代表前一个字符可以出现任意次(0个也可以)。如^b.就是b开头后- 面可有任意数个任意字母
- 就是以3为结尾的任意字符串
- ?:非贪婪匹配。一般情况从右往左匹配正则,?可以实现从左往右,非贪婪指遇到第一个就结束。.?(b.?b).*就是首先开始的b和b之间的字符串
- +: 代表前面的字符至少出现一次(0个到无数个)。如b.+指b后面至少一个任意字母
- {2} {2,5} {2, }: 代表前面的字符出现2次。代表前面的字符出现2到5次. 代表前面字符出现2次及两次以上
- |:代表或的意思 b|c,从左到右,看先匹配到那个。
- (): 代表子字符串。如((a|b)123)代表group(1)为外层括号里的a123|b123;group(2)为内层括号值
- []: 代表[]内的字符满足任意一个都可以。1 :[abcdefg]123代表以里面任意abcdefg中一个字母开头的都可以
- 2:[0-9] [a-z]代表可以为0-9范围内任意一个字符,代表a-z范围任意一个字符 3: [^1] ^为取反,只要不等于1就可以
- 注: 进入[]的字符都不再具有特殊含义[.]就指匹配到.或者
- \s \S: 1:\s代表匹配到一个空格。2:\S代表匹配到一个非空格
- \w \W: 匹配单词字符[a-zA-Z0-9_]/非单词字符
- \d: 匹配数字
提取出生日期
import re
line = "XXX出生于2001年6月"
# line = "XXX出生于2001/6/1"
# line = "XXX出生于2001-6-1"
# line = "XXX出生于2001-06-01"
# line = "XXX出生于2001-06"
regex_str = ".*出生于(\d{4}[年/-]\d{1,2}([月/-]\d{1,2}日|[月/-]\d{1,2}|[月/-]$|$))"
match_obj = re.match(regex_str, line)
if match_obj:
print (match_obj.group(1))
- 爬虫网址去重策略
- 将访问过的url保存到数据库中
- 将url保存到set中。只需要O(1)的代价就可以查询到url
- url经过md5等方法哈希后保存到set中,将url压缩到固定长度而且不重复
- 用bitmap方法,将访问过的url通过hash函数映射到某一位
- bloomfilter方法对bitmap进行改进,多重hash函数降低冲突
- Python字符串编码
- 计算机只能处理数字,文本转换为数字才能处理,计算机中8个bit作为一个字节,所以一个字节能表示的最大数字就是255
- 计算机是美国人发明的,所以一个字节就可以标识所有单个字符,所以ASCII(一个字节)编码就成为美国人的标准编码,但是ASCII处理中文明显不够,中文不止255个汉字,所以中国制定了GB2312编码,用两个字节表示一个汉字。GB2312将ASCII也包含进去了。同理,日文,韩文,越来越多的国家为了解决这个问题就都发展了一套编码,标准越来越多,如果出现多种语言混合显示就一定会出现乱码,于是unicode出现了,它将所有语言包含进去了。
- 看一下ASCII和unicode编码:
字母A用ASCII编码十进制是65,二进制 0100 0001
汉字"中" 已近超出ASCII编码的范围,用unicode编码是20013二进制是01001110 00101101
A用unicode编码只需要前面补0二进制是 00000000 0100 0001乱码问题解决的,但是如果内容全是英文,unicode编码比ASCII编码需要多一倍的存储空间,传输也会变慢。所以此时出现了可变长的编码"utf-8" ,把英文:1字节,汉字3字节,特别生僻的变成4-6字节,如果传输大量的英文utf8作用就很明显。
读取文件,进行操作时转换为unicode编码进行处理
保存文件时,转换为utf-8编码。以便于传输
读文件的库会将转换为unicode
python2 默认编码格式为ASCII,Python3 默认编码为 utf-8
在慕课网上学习了bobby老师的爬虫课程,这里给出地址
https://coding.imooc.com/class/chapter/92.html#Anchor
感兴趣的可以学习
网友评论