您当前的位置: 首页 >  网络

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

彭世瑜 发布时间:2018-07-25 22:45:00 ,浏览量:1

HTTP协议

应用层协议 无状态:每次连接,传输都是独立的 无连接:每次连接只处理一个请求

HTTP请求

GET:没有request body POST: 有request body

HTTP状态码

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

python urllib2会自动302跳转

爬取策略

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

去重策略

1、数据库unique字段存访问过的url 效率太低 2、hashset存访问过的url O(1) 消耗内存 3、md5计算访问过的url后保存到hashset或数据库 碰撞概率较小 4、bit-map,访问过的url的md5值再经过哈希函数映射到bitset某一位 碰撞概率较大 5、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(c)

按照概率: PR(A) = PR(B)/2 + PR(c)/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

正文提取

1、 标签模板 2、 pygoose https://github.com/grangier/python-goose (py2)

文本分类

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

搜索

elasticsearch

关注
打赏
1688896170
查看更多评论

彭世瑜

暂无认证

  • 1浏览

    0关注

    2727博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.1729s