爬虫基础知识.docxVIP

  • 2
  • 0
  • 约2.81千字
  • 约 6页
  • 2019-09-06 发布于福建
  • 举报
爬虫基础知识 一、技术选型 Scrapy和requests+beautifulsoup的对比 1. requests和beautifulsoup都是库,scrapy是框架 2. scrapy框架中可以加入requests和beautifulsoup 3. scrapy框架基于twisted,性能是最大优势 4. scrapy方便扩展,提供了很多内置的功能 5. scrapy内置的css和xpath selector非常方便,beautifulsoup最大的缺陷就是慢 网页分类 常见类型的服务 1.静态网页 事先在服务器上生成的页面,内容不会变 2.动态网页 按照请求,由数据库即时生成的页面(淘宝页面) 3.webservice(restapi) 爬虫能做什么 爬虫作用 1.搜索引擎---百度、google、垂直领域搜索引擎 2.推荐引擎---今日头条 3.机器学习的数据样本 4.数据分析(如金融数据分析)、舆情分析等 正则表达式 介绍 1.为什么必须会正则表达式?分割内容 2.正则表达式的简单应用及python示例 特殊字符 1) ^: 起始字符,限定必须以什么开头 $: 结尾字符,限定必须以什么结尾 *: 前方字符出现任意多次,包括零次 ?: 非贪婪匹配 +: 前方字符出现任意多次,至少一次 {}: 限定前方字符出现次数 {2}: 出现两次 {2, }: 出现两次以上 {2,5}: 最小两次最多五次 |: 或,竖线两旁的词出现一个 2) []: 字符为括号内的任意字符(提取电话号码),中括号内字符不再有特殊含义 [^1]: 字符不为括号内的任何字符 [a-z]: 字符不为括号内a到z内的任意字符 .: 任意字符 3) \s: 空格 \S: 单个不为空格的任意字符 \w: 任意字符=[A-Za-z0-9_] \W: 不为[A-Za-z0-9_]的任意字符 4) [\u4E00-u9FA5]: 汉字 (): 提取指定字符串 \d: 数字 import re line = XXX出生于2001年6月1日 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}|[月/-]$|$)) match_obj = re.match(regex_str,line) if match_obj: print(match_obj.group(1)) 深度优先和广度优先 1.网站的树结构 2.深度优先算法和实现 3.广度优先算法和实现 url结构: 去重,避免环路 深度优先算法(优先爬取子节点)递归实现(设置跳出规则) def depth_tree(tree_node): if tree_node is not None: print(tree_node._data) if tree_node._left is not None: return depth_tree(tree_node._left) if tree_node._right is not None: return depth_tree(tree_node._right) 广度优先算法(优先爬取同级节点,按层次遍历)队列实现 def level_queue(root): 利用队列实现树的广度优先遍历 if root is None: return my_queue = [] node = root my_queue.append(node) while my_queue: node = my_queue.pop(0) print (node.elem) if node.lchild is not None: my_queue.append(node.lchild) if node.rchild is not None: my_queue.append(node.rchild) 爬虫去重策略 1.将访问过的url保存到数据库中 2.将访问过的url保存到set中,只需要o(1)的代价就可以查询url 3.url经过md5等方法哈希后保存到set中 4.用bitmap方法,将访问过的url通过hash函数映射到

文档评论(0)

1亿VIP精品文档

相关文档