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

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

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

相关文章
|
7天前
|
机器学习/深度学习 人工智能 算法
海洋生物识别系统+图像识别+Python+人工智能课设+深度学习+卷积神经网络算法+TensorFlow
海洋生物识别系统。以Python作为主要编程语言,通过TensorFlow搭建ResNet50卷积神经网络算法,通过对22种常见的海洋生物('蛤蜊', '珊瑚', '螃蟹', '海豚', '鳗鱼', '水母', '龙虾', '海蛞蝓', '章鱼', '水獭', '企鹅', '河豚', '魔鬼鱼', '海胆', '海马', '海豹', '鲨鱼', '虾', '鱿鱼', '海星', '海龟', '鲸鱼')数据集进行训练,得到一个识别精度较高的模型文件,然后使用Django开发一个Web网页平台操作界面,实现用户上传一张海洋生物图片识别其名称。
86 7
海洋生物识别系统+图像识别+Python+人工智能课设+深度学习+卷积神经网络算法+TensorFlow
|
3天前
|
机器学习/深度学习 存储 算法
使用Python实现深度学习模型:强化学习与深度Q网络(DQN)
使用Python实现深度学习模型:强化学习与深度Q网络(DQN)
18 2
|
2天前
|
JSON 数据可视化 API
技术心得:如何用Python和API收集与分析网络数据?
技术心得:如何用Python和API收集与分析网络数据?
10 2
|
4天前
|
数据可视化 数据挖掘 知识图谱
精选:15款顶尖Python知识图谱(关系网络)绘制工具,数据分析的强力助手
这里有15款免费工具推荐:NetworkX(Python基础),Graph-tool(C++速度),Graphviz(可视化库),ipycytoscape(Jupyter集成),ipydagred3,ipySigma(NetworkX + Web),Netwulf(交互式),nxviz(Matplotlib绑定),Py3plex(复杂网络分析),Py4cytoscape(Python+Cytoscape),pydot(Graphviz接口),PyGraphistry(GPU加速),python-igraph,pyvis(交互式图形),SNAP(大规模网络分析)。绘制和理解网络图从未如此简单!
13 0
|
5天前
|
数据采集 机器学习/深度学习 数据可视化
利用Python进行网络爬虫和数据抓取
在当今数字化时代,数据是无处不在的。从市场趋势到个人偏好,从社交媒体活动到商业智能,数据扮演着关键的角色。然而,访问、处理和利用数据并不总是轻而易举的。幸运的是,Python提供了一套强大而灵活的工具,使得网络爬虫和数据抓取成为可能。本文将深入探讨如何利用Python进行网络爬虫和数据抓取,为您打开数据世界的大门。
|
4天前
|
程序员 Python
老程序员分享:python爬取电影网站信息并写入文件
老程序员分享:python爬取电影网站信息并写入文件
|
5天前
|
XML 数据采集 存储
经验大分享:python爬取喜马拉雅节目生成RSSFeed
经验大分享:python爬取喜马拉雅节目生成RSSFeed
11 0
|
6天前
|
数据采集 Web App开发 iOS开发
自定义User-Agent:使用Python Requests进行网络请求
自定义User-Agent:使用Python Requests进行网络请求
|
9天前
|
数据采集 存储 JSON
Python网络爬虫教程概览
【6月更文挑战第21天】Python网络爬虫教程概览:安装requests和BeautifulSoup库抓取网页;使用HTTP GET请求获取HTML,解析标题;利用CSS选择器提取数据;处理异步内容可选Selenium;遵循爬虫策略,处理异常,尊重法律与网站规定。
18 1
|
1天前
|
数据采集 前端开发 Java
Python简单爬虫案例
用pyhton从网页中爬取数据,是比较常用的爬虫方式。网页一般由html编写,里面包含大量的标签,我们所需的内容都包含在这些标签之中,除了对python的基础语法有了解之外,还要对html的结构以及标签选择有简单的认知,下面就用爬取fl小说网的案例带大家进入爬虫的世界。