Python爬虫库推荐

很多人学Python,都是从爬虫开始的,毕竟网上类似的资源很丰富,开源项目也非常多。

Python学习网络爬虫主要分3个大的版块: 抓取 , 分析 , 存储

当我们在浏览器中输入一个url后回车,后台会发生什么?

简单来说这段过程发生了以下四个步骤:

•查找域名对应的IP地址。•向IP对应的服务器发送请求。•服务器响应请求,发回网页内容。•浏览器解析网页内容。

那么学习爬虫需要掌握哪些库呢

通用:

1.urllib -网络库(stdlib)。
2.requests -网络库。
3.grab – 网络库(基于pycurl)。
4.pycurl – 网络库(绑定libcurl)。
5.urllib3 – Python HTTP库,安全连接池、支持文件post、可用性高。
6.httplib2 – 网络库。
7.RoboBrowser – 一个简单的、极具Python风格的Python库,无需独立的浏览器即可浏览网页。
8.MechanicalSoup -一个与网站自动交互Python库。
9.mechanize -有状态、可编程的Web浏览库。
10.socket – 底层网络接口(stdlib)。
11.Unirest for Python – Unirest是一套可用于多种语言的轻量级的HTTP库。
12.hyper – Python的HTTP/2客户端。
13.PySocks – SocksiPy更新并积极维护的版本,包括错误修复和一些其他的特征。作为socket模块的直接替换。

网络爬虫框架

1.功能齐全的爬虫

•grab – 网络爬虫框架(基于pycurl/multicur)。•scrapy – 网络爬虫框架(基于twisted),不支持Python3。•pyspider – 一个强大的爬虫系统。•cola – 一个分布式爬虫框架。

2.其他

•portia – 基于Scrapy的可视化爬虫。•restkit – Python的HTTP资源工具包。它可以让你轻松地访问HTTP资源,并围绕它建立的对象。•demiurge – 基于PyQuery的爬虫微框架。

HTML/XML解析器

1.通用

•lxml – C语言编写高效HTML/ XML处理库。支持XPath。•cssselect – 解析DOM树和CSS选择器。•pyquery – 解析DOM树和jQuery选择器。•BeautifulSoup – 低效HTML/ XML处理库,纯Python实现。•html5lib – 根据WHATWG规范生成HTML/ XML文档的DOM。该规范被用在现在所有的浏览器上。•feedparser – 解析RSS/ATOM feeds。•MarkupSafe – 为XML/HTML/XHTML提供了安全转义的字符串。•xmltodict – 一个可以让你在处理XML时感觉像在处理JSON一样的Python模块。•xhtml2pdf – 将HTML/CSS转换为PDF。•untangle – 轻松实现将XML文件转换为Python对象。

2.清理

•Bleach – 清理HTML(需要html5lib)。•sanitize – 为混乱的数据世界带来清明。

文本处理

用于解析和操作简单文本的库。

1.通用
2.difflib – (Python标准库)帮助进行差异化比较。
3.Levenshtein – 快速计算Levenshtein距离和字符串相似度。
4.fuzzywuzzy – 模糊字符串匹配。
5.esmre – 正则表达式加速器。
6.ftfy – 自动整理Unicode文本,减少碎片化。

自然语言处理

处理人类语言问题的库。

•NLTK -编写Python程序来处理人类语言数据的最好平台。•Pattern – Python的网络挖掘模块。他有自然语言处理工具,机器学习以及其它。•TextBlob – 为深入自然语言处理任务提供了一致的API。是基于NLTK以及Pattern的巨人之肩上发展的。•jieba – 中文分词工具。•SnowNLP – 中文文本处理库。•loso – 另一个中文分词库。

浏览器自动化与仿真

•selenium – 自动化真正的浏览器(Chrome浏览器,火狐浏览器,Opera浏览器,IE浏览器)。•Ghost.py – 对PyQt的webkit的封装(需要PyQT)。•Spynner – 对PyQt的webkit的封装(需要PyQT)。•Splinter – 通用API浏览器模拟器(selenium web驱动,Django客户端,Zope)。

多重处理

•threading – Python标准库的线程运行。对于I/O密集型任务很有效。对于CPU绑定的任务没用,因为python GIL。•multiprocessing – 标准的Python库运行多进程。•celery – 基于分布式消息传递的异步任务队列/作业队列。•concurrent-futures – concurrent-futures 模块为调用异步执行提供了一个高层次的接口。

异步

异步网络编程库

•asyncio – (在Python 3.4 +版本以上的 Python标准库)异步I/O,时间循环,协同程序和任务。•Twisted – 基于事件驱动的网络引擎框架。•Tornado – 一个网络框架和异步网络库。•pulsar – Python事件驱动的并发框架。•diesel – Python的基于绿色事件的I/O框架。•gevent – 一个使用greenlet 的基于协程的Python网络库。•eventlet – 有WSGI支持的异步框架。•Tomorrow – 异步代码的奇妙的修饰语法。

队列

•celery – 基于分布式消息传递的异步任务队列/作业队列。•huey – 小型多线程任务队列。•mrq – Mr. Queue – 使用redis & Gevent 的Python分布式工作任务队列。•RQ – 基于Redis的轻量级任务队列管理器。•simpleq – 一个简单的,可无限扩展,基于Amazon SQS的队列。•python-gearman – Gearman的Python API。

云计算

•picloud – 云端执行Python代码。•dominoup.com – 云端执行R,Python和matlab代码

网页内容提取

提取网页内容的库。

•HTML页面的文本和元数据•newspaper – 用Python进行新闻提取、文章提取和内容策展。•html2text – 将HTML转为Markdown格式文本。•python-goose – HTML内容/文章提取器。•lassie – 人性化的网页内容检索工具

WebSocket

用于WebSocket的库。

•Crossbar – 开源的应用消息传递路由器(Python实现的用于Autobahn的WebSocket和WAMP)。•AutobahnPython – 提供了WebSocket协议和WAMP协议的Python实现并且开源。•WebSocket-for-Python – Python 2和3以及PyPy的WebSocket客户端和服务器库。

DNS解析

•dnsyo – 在全球超过1500个的DNS服务器上检查你的DNS。•pycares – c-ares的接口。c-ares是进行DNS请求和异步名称决议的C语言库。

计算机视觉

•OpenCV – 开源计算机视觉库。•SimpleCV – 用于照相机、图像处理、特征提取、格式转换的简介,可读性强的接口(基于OpenCV)。•mahotas – 快速计算机图像处理算法(完全使用 C++ 实现),完全基于 numpy 的数组作为它的数据类型。

web开发的一些框架

1.Django

Django是一个开源的Web应用框架,由Python写成,支持许多数据库引擎,可以让Web开发变得迅速和可扩展,并会不断的版本更新以匹配Python最新版本,如果是新手程序员,可以从这个框架入手。

2.Flask

Flask是一个轻量级的Web应用框架, 使用Python编写。基于 WerkzeugWSGI工具箱和 Jinja2模板引擎。使用 BSD 授权。

Flask也被称为 “microframework” ,因为它使用简单的核心,用 extension 增加其他功能。Flask没有默认使用的数据库、窗体验证工具。然而,Flask保留了扩增的弹性,可以用Flask-extension加入这些功 能:ORM、窗体验证工具、文件上传、各种开放式身份验证技术。

3.Web2py

Web2py是一个用Python语言编写的免费的开源Web框架,旨在敏捷快速的开发Web应用,具有快速、可扩展、安全以及可移植的数据库驱动的应用,遵循LGPLv3开源协议。

Web2py提供一站式的解决方案,整个开发过程都可以在浏览器上进行,提供了Web版的在线开发,HTML模版编写,静态文件的上传,数据库的编写的功能。其它的还有日志功能,以及一个自动化的admin接口。

4.Tornado

Tornado即是一个Web server(对此本文不作详述),同时又是一个类web.py的micro-framework,作为框架Tornado的思想主要来源于Web.py,大家在Web.py的网站首页也可以看到Tornado的大佬Bret Taylor的这么一段话(他这里说的FriendFeed用的框架跟Tornado可以看作是一个东西):因为有这层关系,后面不再单独讨论Tornado。

5.CherryPy

CherryPy是一种用于Python的、简单而非常有用的Web框架,其主要作用是以尽可能少的操作将Web服务器与Python代码连接,其功能包括内置的分析功能、灵活的插件系统以及一次运行多个HTTP服务器的功能,可与运行在最新版本的Python、Jython、Android上。

关于框架的选择误区

在框架的选择问题上,许多人很容易就陷入了下面两个误区中而不自知:哪个框架最好——世上没有最好的框架,只有最适合你自己、最适合你的团队的框架。编程语言选择也是一个道理,你的团队Python最熟就用Python好了,如果最熟悉的是Ruby那就用Ruby好了,编程语言、框架都只是工具,能多、快、好、省的干完活就是好东西。

过分关注性能——其实大部分人是没必要太关心框架的性能的,因为你开发的网站根本就是个小站,能上1万的IP的网站已经不多了,上10万的更是很少很少。在没有一定的访问量前谈性能其实是没有多大意义的,因为你的CPU和内存一直就闲着呢。

如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/652524.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

消息中间件之八股面试回答篇:三、RabbitMQ如何解决消息堆积问题(100万条消息堆积)+RabbitMQ高可用性和强一致性机制+回答模板

RabbitMQ中的消息堆积问题 当生产者发送消息的速度超过了消费者处理消息的速度,就会导致队列中的消息堆积,直到队列存储消息达到上限。之后发送的消息就会成为死信,可能会被丢弃,这就是消息堆积问题。 解决消息堆积有三种种思路…

网络工程师必学知识:2、数据链路层-II型以太帧的封装

1.概述: 针对于链路层,华为官网IP报文格式大全里面包含了很多。如下图: 今天主要分析Ethernet II以太帧。 2.Frame Format: 12Byte(inter frame gap)|7B(同步码)|1B(定界符)|6B(DMAC)|6B(SMAC)|2B(Type)…

【Demo】基于CharacterController组件的角色控制

项目介绍 项目名称:Demo1 项目版本:1.0 游戏引擎:Unity2020.3.26f1c1 IDE:Visual Studio Code 关键词:Unity3D,CharacterController组件,角色控制,自定义按键,Scrip…

Rider 打开Unity项目 Project 全部显示 load failed

电脑自动更新,导致系统重启,第二天Rider打开Unity 工程,没有任何代码提示,字符串查找也失效。 现象: 1.所有的Project均显示laod failed。点击load failed。右侧信息显示Can not start process 2.选中解决方案进行Bui…

解决PyCharm的Terminal终端conda环境默认为base无法切换的问题

问题描述 在使用PyCharm的Terminal终端时,打开的默认环境为base。 在使用切换命令时,依旧无法解决。 解决方法 1、输入以下命令以查看conda的配置信息: conda config --show2、在输出中找到 auto_activate_base 的行,发现被…

IMX6ULL驱动学习——通过总线设备驱动模型点亮野火开发板小灯【参考韦东山老师教程】

参考:【IMX6ULL驱动开发学习】11.驱动设计之面向对象_分层思想(学习设备树过渡部分)-CSDN博客 韦东山课程:LED模板驱动程序的改造_总线设备驱动模型 我使用的开发板:野火imx6ull pro 欢迎大家一起讨论学习 实现了总线设…

uniapp 实现路由拦截,权限或者登录控制

背景: 项目需要判断token,即是否登录,登录之后权限 参考uni-app官方: 为了兼容其他端的跳转权限控制,uni-app并没有用vue router路由,而是内部实现一个类似此功能的钩子:拦截器,由…

数字图像处理(实践篇)三十三 OpenCV-Python从立体图像创建深度图实践

目录 一 方案 二 实践 双眼视觉是指人类使用两只眼睛同时观察同一场景,通过左右眼的视差来感知深度。左眼和右眼的视差是由于它们在空间中的位置不同而产生的,这种差异可以被大脑解读为物体的距离和深度。为了从立体图像构建深度图,找到两个图像之间的视差,可以初始化并创…

Java强训day7(选择题编程题)

选择题 public class Test01{private static int x 100;public static void main(String[] args) {Test01 hs1 new Test01();hs1.x;Test01 hs2 new Test01();hs2.x;hs1new Test01();hs1.x;Test01.x--;System.out.println("x"x);} }public class Test01{private …

倒排索引的构建与查询

倒排索引是信息检索的重要技术,本文将基于中文短信数据(数据集可在本文所附资源处下载或点击此处链接下载),编程构建倒排索引并实现布尔查询。 1. 功能设计 用户输入查询,按下回车键,如果该查询作为单独的…

【Kafka】主题Topic详解

目录 主题的管理创建主题查看主题修改主题删除主题 增加分区分区副本的分配必要参数配置KafkaAdminClient应用功能操作示例 主题的管理 使用kafka-topics.sh脚本。 下面是使用脚本的一些选项 选项说明–config <String: namevalue>为创建的或修改的主题指定配置信息。…

Mybatis-Plus入门

Mybatis-Plus入门 MyBatis-Plus 官网&#xff1a;https://mp.baomidou.com/ 1、简介 MyBatis-Plus (简称 MP) 是一个 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、 提高效率而生。 https://github.com/baomidou/mybatis-p…

【Java】Spring注解开发

一、Spring注解开发 1 注解开发定义Bean对象【重点】 目的&#xff1a;xml配置Bean对象有些繁琐&#xff0c;使用注解简化Bean对象的定义 问题导入 问题1&#xff1a;使用什么标签进行Spring注解包扫描&#xff1f; 问题2&#xff1a;Component注解和Controller、Service、R…

Blender教程(基础)-初始用户界面-01

开始第一天的Blender学习、也是业余学习。希望记录下这一份学习的过程、并且分享给大家。今天带大家认识Blender这一款软件&#xff0c;先说说我为什么选择了Blender&#xff0c;我在软件市场找了好久&#xff0c;市场上其他雷同软件都是要么收费要么不好用&#xff0c;最终决定…

【Vitest】 Vitest测试框架的简单使用

简言 在了解vue源码的时候接触到了vitest测试框架,它的官网语言有中文&#xff0c;所以本篇只作简单的使用介绍。 Vitest官网 Vitest 旨在将自己定位为 Vite 项目的首选测试框架&#xff0c;即使对于不使用 Vite 的项目也是一个可靠的替代方案。它本身也兼容一些Jest的API用法…

1.28学习总结

队列&#xff1a; 1.求区间所有后缀最大值的位置&#xff08;单调队列&#xff09; 搜索&#xff1a; 1.天下第一&#xff08;记忆化&#xff09; 2.拯救oibh总部&#xff08;DFS连通性问题&#xff09; 3.国王的魔镜&#xff08;递归&#xff09; 4.回家&#xff08;BFS三维的…

AngularJS基础入门文档

引言&#xff1a; AngularJS是一个开源的JavaScript框架&#xff0c;用于构建动态Web应用程序。它提供了一套强大的工具和功能&#xff0c;使开发人员能够更轻松地构建交互性强、响应式的网页应用。本文将为您介绍AngularJS的基本概念和使用方法&#xff0c;帮助您快速入门并掌…

寒假思维训练计划day16 A. Did We Get Everything Covered?

今天更新一道1月27号晚上div2的C题作为素材&#xff0c;感觉用到了我的构造题总结模型&#xff0c;我总结了一系列的模型和例题。 摘要&#xff1a; Part1 定义"边界贪心法" Part2 题意 Part3 题解 Part4 代码 Part5 思维构造题模型和例题 Part1 边界贪心…

【服务器Midjourney】创建部署Midjourney网站

目录 🌺【前言】 🌺【准备】 🌺【宝塔搭建MJ】 🌼1. 给服务器添加端口 🌼2. 使用Xshell连接服务器 🌼3. 安装docker 🌼4. 安装Midjourney程序 🌼5. 绑定域名+申请SSL证书 🌼6. 更新网站

全球唯一使用Python生成双色球和大乐透

生成双色球和大乐透代码&#xff1a; import randomdef gen_union_lotto(nums: int):"""随机生成N个双色球:param nums::return:"""union_list []for i in range(0, nums):data []for data_ in range(0, 6):random_num random.randint(1, 33…