建议参照目录大纲,即笔记第一篇来了解大致路线后进行博客查阅。每大章的分支都十分清楚
1.2基础知识部分
1.2.1常见类型的服务:
静态网站
动态网站
webservice(restapi)
1.2.2正则表达式的一些应用以及python代码示例:
^s:表示字符串必须以s开头
import re string_demo="software2018" regex_str = "^s.*" if re.match(regex_str,string_str): print("yes")
. :表示可以是任意字符
.*:表示可以任意字符重复任意多次
5$:表示必须以5作为结尾
.+:表示至少有一个字符
中括号模式匹配:[0-9][^9]:表示0-9的数字,非9的数字
\s \S \w \W:分别代表 空格 不为空格 为字符 不为字符(数字,字母)
\d:数字
\d+:多个数字,之前已经用了+
|:表示或者选择
str = "software123" regex_str = "(software|sooftware)" match_str = re.match(regex_str,str) if match_str: print(match_str.group(1))
输出software
str = "software123" regex_str = "((software|sooftware)123)" match_str = re.match(regex_str,str) if match_str: print(match_str.group(1)) print(match_str.group(2))
输出software123
software
注意:这里输出的两重(),十分常见
.{1},.{2,},.{2,5}:表示出现一次,出现两次以上,出现2到5次
?:使用非贪婪匹配模式
import re string_demo="sooooooossftware2018" regex_str = ".*(s.*s).*" match_str = re.match(regex_str,string_str): if match_str: print(match_str.group(1))
输出为ss
import re string_demo="sooooooossftware2018" regex_str = ".*?(s.*s).*" match_str = re.match(regex_str,string_str): if match_str: print(match_str.group(1))
输出为soooooooss
import re string_demo="sooooooossftware2018" regex_str = ".*?(s.*?s).*" match_str = re.match(regex_str,string_str): if match_str: print(match_str.group(1))
输出为sooooooos
使用?就是为了防止去除贪婪模式
贪婪模式详细说明:
左边的?如果不加的话,就会采取向右最后一个能够满足条件的
右边的,如果不加的话,就算在向左寻找的过程中寻找到了,也还会向左继续找,直到最后一个满足条件的被找到
1.2.3深度优先和广度优先
深度优先和广度优先是爬虫最基础的爬取方式了,算法在数据结构课上也是重中之重,当然实现起来也很简单,递归方式和非递归方式都可以。
1.2.4 URL去重策略
1.将访问过的url存到数据库中
2.将访问过的url访问到内存中,只需要要O(1) 的代价就可以查询url
3.url经过MD5等方法哈希后存到set中
4.用bitmap方法,将访问过的url通过hash函数映射到某一位
5.bloomfilter方法对bitmap进行改进,多重hash函数降低冲突
我们分析一下各种方式的优缺点:
1.使用数据库:每次都要去数据库中进行查找,虽然有缓存但是还是很慢
2.url保存在内存当中:直接存储内存消耗太大(一千万就大概需要900多MB了)
3.url经过MD5hash后保存到set中:MD5一般编码到128bit=16byte,scrapy也是采用这种方式(大概掌握这种就OK了)
4.用bitmap将访问过的url映射到某一个具体的位。但是容易冲突,hash来防止冲突,但是冲突还是比较多的。这个方式压缩内存非常大。
5.怎么样才能够有bitmap的方式进行存url,同时又可以减少冲突呢?
使用第五种方式,即bollmfilter,后面会再写
以上就是scrapy爬虫笔记系列第一节的内容
笔记一到十链接
http://blog.csdn.net/sx_csu2016sw/article/details/79284369
http://blog.csdn.net/sx_csu2016sw/article/details/79284427
http://blog.csdn.net/sx_csu2016sw/article/details/79284449
http://blog.csdn.net/sx_csu2016sw/article/details/79284469
http://blog.csdn.net/sx_csu2016sw/article/details/79284481
http://blog.csdn.net/sx_csu2016sw/article/details/79284491
http://blog.csdn.net/sx_csu2016sw/article/details/79284509
http://blog.csdn.net/sx_csu2016sw/article/details/79284525
http://blog.csdn.net/sx_csu2016sw/article/details/79284547
http://blog.csdn.net/sx_csu2016sw/article/details/79284567