Python爬虫入门心得分享

网络爬虫是一种自动获取网页内容的程序,是搜索引擎的重要组成部分。网络爬虫为搜索引擎从万维网下载网页。一般分为传统爬虫和聚焦爬虫。

学爬虫是循序渐进的过程,作为零基础小白,大体上可分为三个阶段,第一阶段是入门,掌握必备的基础知识,第二阶段是模仿,跟着别人的爬虫代码学,弄懂每一行代码,第三阶段是自己动手,这个阶段你开始有自己的解题思路了,可以独立设计爬虫系统。

爬虫涉及的技术包括但不限于熟练一门编程语言(这里以 Python 为例) HTML 知识、HTTP/HTTPS 协议的基本知识、正则表达式、数据库知识,常用抓包工具的使用、爬虫框架的使用、涉及到大规模爬虫,还需要了解分布式的概念、消息队列、常用的数据结构和算法、缓存,甚至还包括机器学习的应用,大规模的系统背后都是靠很多技术来支撑的。爬虫只是为了获取数据,分析、挖掘这些数据才是价值,因此它还可以延伸到数据分析、数据挖掘等领域,给企业做决策,所以作为一名爬虫工程师,是大有可为的。

那么是不是一定要把上面的知识全学完了才可以开始写爬虫吗?当然不是,学习是一辈子的事,只要你会写 Python 代码了,就直接上手爬虫,好比学车,只要能开动了就上路吧,当然写代码可比开车安全多了。

用 Python 写爬虫,首先需要会 Python,把基础语法搞懂,知道怎么使用函数、类和常用的数据结构如 list、dict 中的常用方法就算基本入门。接着你需要了解 HTML,HTML 就是一个文档树结构,网上有个 HTML 30分钟入门教程 够用了。然后是关于 HTTP 的知识,爬虫基本原理就是通过网络请求从远程服务器下载数据的过程,而这个网络请求背后的技术就是基于 HTTP 协议。作为入门爬虫来说,你需要了解 HTTP协议的基本原理,虽然 HTTP 规范用一本书都写不完,但深入的内容可以放以后慢慢去看,理论与实践相结合。

立即学习“Python免费学习笔记(深入)”;

网络请求框架都是对 HTTP 协议的实现,比如著名的网络请求库 Requests 就是一个模拟浏览器发送 HTTP 请求的网络库。了解 HTTP 协议之后,你就可以专门有针对性的学习和网络相关的模块了,比如 Python 自带有 urllib、urllib2(Python3中的urllib),httplib,Cookie等内容,当然你可以直接跳过这些,直接学习 Requests 怎么用,前提是你熟悉了 HTTP协议的基本内容。这里不得不推荐的一本书是《图解HTTP》。数据爬下来,大部分情况是 HTML 文本,也有少数是基于 XML 格式或者 Json 格式的数据,要想正确处理这些数据,你要熟悉每种数据类型的解决方案,比如JSON数据可以直接使用 Python自带的模块 json,对于 HTML 数据,可以使用 BeautifulSoup、lxml 等库去处理,对于 xml 数据,除了可以使用 untangle、xmltodict等第三方库。

入门爬虫,学习正则表达式并不是必须的,你可以在你真正需要的时候再去学,比如你把数据爬取回来后,需要对数据进行清洗,当你发现使用常规的字符串操作方法根本没法处理时,这时你可以尝试了解一下正则表达式,往往它能起到事半功倍的效果。Python 的 re 模块可用来处理正则表达式。这里也推荐几个教程: 正则表达式30分钟入门教程 Python正则表达式指南 正则表达式完全指南

数据清洗完最终要进行持久化存储,你可以用文件存储,比如CSV文件,也可以用数据库存储,简单的用 sqlite,专业点用 MySQL,或者是分布式的文档数据库 MongoDB,这些数据库对Python都非常友好,有现成的库支持。 Python操作MySQL数据库 通过Python连接数据库

从数据的抓取到清洗再到存储的基本流程都走完了,也算是基本入门了,接下来就是考验内功的时候了,很多网站都设有反爬虫策略,他们想方设法阻止你用非正常手段获取数据,比如会有各种奇奇怪怪的验证码限制你的请求操作、对请求速度做限制,对IP做限制、甚至对数据进行加密操作,总之,就是为了提高获取数据的成本。这时你需要掌握的知识就要更多了,你需要深入理解 HTTP 协议,你需要理解常见的加解密算法,你要理解 HTTP 中的 cookie,HTTP 代理,HTTP中的各种HEADER。爬虫与反爬虫就是相爱相杀的一对,道高一次魔高一丈。如何应对反爬虫没有既定的统一的解决方案,靠的是你的经验以及你所掌握的知识体系。这不是仅凭21天入门教程就能达到的高度。

数据结构和算法

进行大规模爬虫,通常都是从一个URL开始爬,然后把页面中解析的URL链接加入待爬的URL集合中,我们需要用到队列或者优先队列来区别对待有些网站优先爬,有些网站后面爬。每爬去一个页面,是使用深度优先还是广度优先算法爬取下一个链接。每次发起网络请求的时候,会涉及到一个DNS的解析过程(将网址转换成IP)为了避免重复地 DNS 解析,我们需要把解析好的 IP 缓存下来。URL那么多,如何判断哪些网址已经爬过,哪些没有爬过,简单点就是是使用字典结构来存储已经爬过的的URL,但是如果碰过海量的URL时,字典占用的内存空间非常大,此时你需要考虑使用 Bloom Filter(布隆过滤器),用一个线程逐个地爬取数据,效率低得可怜,如果提高爬虫效率,是使用多线程,多进程还是协程,还是分布式操作。

关于实践

网上的爬虫教程多如牛毛,原理大体相同,只不过是换个不同的网站进行爬取,你可以跟着网上的教程学习模拟登录一个网站,模拟打卡之类的,爬个豆瓣的电影、书籍之类的。通过不断地练习,从遇到问题到解决问题,这样的收获看书没法比拟的。

爬虫常用库

urllib、urlib2(Python中的urllib)python内建的网络请求库

urllib3:线程安全的HTTP网络请求库

requests:使用最广泛的网络请求库,兼容py2和py3

grequests:异步的requests

BeautifulSoup:HTML、XML操作解析库

lxml:另一种处理 HTML、XML的方式

tornado:异步网络框架

Gevent:异步网络框架

Scrapy:最流行的爬虫框架

pyspider:爬虫框架

xmltodict:xml转换成字典

pyquery:像jQuery一样操作HTML

Jieba :分词

SQLAlchemy:ORM框架

celery :消息队列

rq:简单消息队列

python-goose :从HTML中提取文本

书籍推荐:

《图解HTTP》

《HTTP权威指南》

《计算机网络:自顶向下方法》

《用Python写网络爬虫》

《Python网络数据采集》

《精通正则表达式》

《Python入门到实践》

《自己动手写网络爬虫》

《Crypto101》

《图解密码技术》

以上内容就是关于Python爬虫技术入门经验分享,希望能帮助到大家。

相关推荐:

Python3 基础爬虫简介

python最简单的网页爬虫教程

python爬虫的实践

以上就是Python爬虫入门心得分享的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2265797.html

(0)
上一篇 2025年2月27日 08:55:18
下一篇 2025年2月18日 07:30:07

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • K-means算法在Python中的实现

    k-means是机器学习中一个比较常用的算法,属于无监督学习算法,其常被用于数据的聚类,只需为它指定簇的数量即可自动将数据聚合到多类中,相同簇中的数据相似度较高,不同簇中数据相似度较低。 K-MEANS算法是输入聚类个数k,以及包含 n个数…

    2025年2月27日
    200
  • python matplotlib坐标轴设置的方法

    在使用matplotlib模块时画坐标图时,往往需要对坐标轴设置很多参数,这些参数包括横纵坐标轴范围、坐标轴刻度大小、坐标轴名称等 ,在matplotlib中包含了很多函数,用来对这些参数进行设置。我们可以对坐标轴进行设置,设置坐标轴的范围…

    2025年2月27日 编程技术
    200
  • 用Python语言描述最大连续子序列和

    求最大连续子序列的和是一个很经典很古老的面试题了,本文我们就和大家分享关于用python语言描述最大连续子序列和方法,希望能帮助到大家。 1.问题描述 假设有一数组(python里为list啦)[1,3,-3,4,-6,-1],求数组中最大…

    编程技术 2025年2月27日
    200
  • 实例分析Python跨文件全局变量的实现方法

    我们在使用python编写应用的时候,有时候会遇到多个文件之间传递同一个全局变量的情况。所以下面这篇文章主要给大家介绍了关于python跨文件全局变量的实现方法,需要的朋友可以参考借鉴,下面来一起看看吧,希望能帮助到大家。 在C语言中,由于…

    编程技术 2025年2月27日
    200
  • j详解python利用rsa库做公钥解密的方法

    rsa是一种公钥密码算法,rsa的密文是对代码明文的数字的 e 次方求mod n 的结果。下面这篇文章主要给大家介绍了关于python利用rsa库做公钥解密的方法教程,文中通过示例代码介绍的非常详细,需要的朋友可以参考下,希望能帮助到大家。…

    编程技术 2025年2月27日
    200
  • Python通过matplotlib简单绘制动画实例

    matplotlib是一个python的2d绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。通过matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。本文主要介绍了p…

    2025年2月27日
    200
  • Python中xlwt设置excel单元格字体及格式方法

    本文主要为大家详细介绍了python中使用xlwt模块设置单元格的一些基本样式,如设置单元格的背景颜色,下框线,字体,字体的颜色,设置列宽行高,插入简单的图片,希望能帮助到大家。 详细程序如下: #!/usr/bin/env python#…

    2025年2月27日
    100
  • Python多线程爬虫实战_爬取糗事百科段子的实例_python

    下面小编就为大家分享一篇python多线程爬虫实战_爬取糗事百科段子的实例,具有很好的参考价值,希望对大家有所帮助。对python感兴趣的小伙伴们一起跟随小编过来看看吧 多线程爬虫:即程序中的某些程序段并行执行, 合理地设置多线程,可以让爬…

    编程技术 2025年2月27日
    200
  • python导入csv文件出现SyntaxError问题分析_python

    这篇文章主要介绍了python导入csv文件出现syntaxerror问题分析,同时涉及python导入csv文件的三种方法,具有一定借鉴价值,对python感兴趣的朋友可以参考下。 背景 np.loadtxt()用于从文本加载数据。 文本…

    编程技术 2025年2月27日
    200
  • python matplotlib中文显示参数设置解析_python

    这篇文章主要介绍了python matplotlib中文显示参数设置解析,具有一定借鉴价值,对python感兴趣的朋友可以参考下。 最近在学习python著名的绘图包matplotlib时发现,有时候图例等设置无法正常显示中文,于是就想把这…

    2025年2月27日
    200

发表回复

登录后才能评论