Python爬虫信息爬取

Python爬虫:网络信息爬取与处理知识梳理

转载:https://blog.csdn.net/mouday/article/details/81211640

一、HTTP协议

1. 应用层协议

  • 无状态:每次连接,传输都是独立的
  • 无连接:每次连接只处理一个请求

2. HTTP请求

  • GET:没有request body
  • POST: 有request body

3.HTTP状态码

  • 2xx:成功
  • 3xx:跳转
  • 4xx: 客户端错误
  • 403 Forbidden 没有登录,或ip被封
  • 5xx:服务端错误
  • python urllib2会自动302跳转

爬取策略

  • 种子站点
  • 深度优先
  • 广度优先

去重策略

  • 数据库unique字段存访问过的url 效率太低 2、hashset存访问过的url O(1) 消耗内
  • md5计算访问过的url后保存到hashset或数据库 碰撞概率较小
  • bit-map,访问过的url的md5值再经过哈希函数映射到bitset某一位 碰撞概率较大
  • bloom filter 使用多个哈希函数,创建一个m位的bitset,先初始化所有位为0,然后选择k
    个不同的哈希函数,第i个哈希函数对字符串str哈希的结果记为h(i, str),且h(i, str)的范围
    是0 - m-1

评估网页数量

百度:site:www.mafengwo.cn 
google:site:www.mafengwo.cn/travel-scenic-spot

pip install murmurhash3 bitarray pybloomfilter
安装以下两个组件之后依然安装失败 
visualcppbuildtools_full.exe 
vc_redist.x64.exe

http://www.mafengwo.cn/robots.txt

Sitemap
top-down

pip install lxml

爬取工具

多线程:线程来回切换造成额外开销
多进程多ip,可以提高效率
数据库具有读写保护

分布式数据库 mongodb, redis, hbase
分布式爬虫
分布式系统 master - slave 主从模式

PageRank

数量:指向A页面的链接越多,A越重要
质量:指向A页面的页面质量越高,A越重要

有向图
A -> B -> c -> D
B -> A -> D
C -> A
D -> B -> C

A的PR值:
PR(A) = PR(B) + PR©

按照概率:
PR(A) = PR(B)/2 + PR©/1

网站如何发现爬虫

1、单一IP非常规的访问频次
2、单一IP非常规的数据流量
3、大量重复简单的网站浏览行为
4、只下载网页,没有后续的js,css请求
5、通过一些陷阱来发现爬虫,例如:一些通过css对用户隐藏的链接,只用爬虫才会访问

反爬:

1、User-Agent
2、基于流量的拒绝:开启带宽限制模块,设置访问最大带宽,每个IP最多3个链接,最大1M/s
3、基于Ip连接的拒绝

可能被发现网站发现
301, 4xx, 500

反爬应对措施

1、动态切换IP,代理服务器 路由器断线重连
2、多主机策略
3、爬慢点,不要攻击主机,找到访问频次的临界点
4、把爬虫放到访问频繁的主站IP的子网下,例如教育网
5、频繁改变自己User-Agent
6、探测陷阱,比如nofollow, display:none
7、如果使用规则进行批量爬取,需要对规则进行组合
8、如果可能按照robots.txt文明爬取

动态网页

  • PhantomJS + selenium
    browser.set_window_size(1280, 2400)
    browser.close()
    browser.quit()
    ignore-image = True 不加载图片,加快速度

  • URL:
    完整路径: http://www.baidu.com
    绝对路径: //www.baidu.com
    相对路径: /tieba

  • 杀掉所有PhantomJS进程
    subprocess.call(“pgrep phantomjs | xargs kill”)

重复网页

  • 完全重复

  • 内容重复

  • 布局重复

  • 部分重复

  • 查重算法:文本相似度

  • 特征提取:分词加权成向量

  • 高维空间夹角越小相似度越高
    v1 * v2 = |v1||v2|cosa

  • 海明距离simhash:两个二进制串中不同位的数量
    pip install simhash

验证码识别

  • pillow
  • pytesseract

正文提取

文本分类

  • List item
  • 结巴分词jieba
  • tf-idf
  • pip install sklearn scipy numpy

搜索

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值