![](https://img-blog.csdnimg.cn/20210510202416903.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Python网络爬虫权威指南(第2版)
文章平均质量分 89
本书作者 [美] 瑞安 • 米切尔,译者神烦小宝。
1~6为创建爬虫篇,7~18为高级网页抓取篇
木景夕
这个作者很懒,什么都没留下…
展开
-
18.网页抓取的法律与道德约束
本章内容介绍美国与网页抓取相关的法律(以及一些国际法),并学习如何分析网页抓取行为的法律和道德约束。1.商标、版权、专利知识产权有 3 种基本类型:商标(用 TM 或 ® 表示)、版权(用 © 表示)和专利(有时会用文字说明某发明受专利保护或注明专利号,但通常没有任何说明)。专利只是用来声明发明的所有权。图片、文字和任何信息本身不能获得专利权。获得专利权的是这些无形的东西(技术),而不是专利报告中的内容。商标(trademark)是一个单词、词组、符号和 / 或设计,用来标识和区分一种商品的来源。原创 2021-07-05 15:47:57 · 355 阅读 · 0 评论 -
17.远程抓取
不只是在单独的进程中运行爬虫,而是完全在单独的机器上运行爬虫。本章内容介绍让程序在不同的机器上运行,或者在你的电脑上用不同的 IP 地址运行。当你停止在自己的笔记本电脑上运行 Python 爬虫后,生活会变得更加轻松。1.为什么要用远程服务器使用远程服务器可能像是启动一个供广大用户使用的 Web 应用时所采取的必然步骤。启用远程平台的人通常基于两个目的:需要更强的计算能力和更大的灵活性,以及需要使用可变 IP 地址。(1)避免IP地址被封杀创建网络爬虫的第一原则是:几乎一切都可以伪造。但有一样原创 2021-07-04 17:52:08 · 200 阅读 · 0 评论 -
13.图像识别与文字处理
本篇重点介绍机器视觉的一个分支——文字识别,介绍如何用一些 Python 库来识别和使用基于文字的图像。验证码(CAPTCHA)就利用了这种人类用户可以正常读取但是大多数机器人都无法读取的图片。将图像转化成文字被称为光学字符识别(optical character recognition,OCR)1.OCR库概述Python有很多库可以进行图像处理,但这里只重点介绍两个库:Pillow 和Tesseract。这两个库互为补充,共同对互联网上的图片进行处理和 OCR 识别。Pillow 执行第一步,原创 2021-06-12 17:44:16 · 1673 阅读 · 2 评论 -
11.抓取JavaScript
客户端脚本语言是运行在浏览器而非服务器上的语言。客户端语言成功的前提是浏览器能够正确地解释和执行这类语言。通常在网上遇到的客户端语言只有两种:ActionScript(开发 Flash 应用的语言)和JavaScript。总之,抓取 Flash 页面的需求并不多,现代网页中普遍使用的客户端语言是JavaScript。JavaScript 是 Web 上最常用也是支持者最多的客户端脚本语言。它可以收集用户跟踪数据,不需要重载页面直接提交表单,在页面中嵌入多媒体文件,甚至运行在线游戏。网页源代码的scrip原创 2021-05-31 16:33:43 · 564 阅读 · 1 评论 -
9.自然语言处理
理解文本分析的原理对各种机器学习场景都是非常有用的,而且还可以提高自己利用概率论和算法知识对现实问题进行建模的能力。1.概括数据简单修改一下我们在第 8 章用过的 n-gram 模型,就可以用来获得 2-gram 序列的频率数据,并返回一个 2-gram 的 Counter 对象,代码如下:# -*- coding: GBK -*-from urllib.request import urlopenfrom bs4 import BeautifulSoupimport reimport str原创 2021-05-24 15:59:38 · 334 阅读 · 0 评论 -
15.用爬虫测试网站
网站的前端测试经常最后才做,或者指派给低级程序员去做,最多再给他们一个检查表和一个 bug 跟踪器。就可以把检查表变成一系列单元测试,用网络爬虫代替人眼进行测试。本篇内容将介绍测试的基础知识,以及如何用 Python 网络爬虫测试各种简单或复杂的网站。1.测试简介什么是单元测试对于程序员来说,测试和单元测试(unit test)这两个词基本可以看成是等价的。单元测试通常具有以下特点:每个单元测试用于测试一个组件的功能的一个方面。通常,一个组件的所有单元测试都集成在同一个类(class)里。每原创 2021-07-03 09:54:45 · 1560 阅读 · 0 评论 -
16.并行网页抓取
网页抓取通常并不能单纯依靠“给问题增加更多的进程”来提升速度。运行多个程序未必能将速度提升几倍,而且可能会被远程服务器封杀。在某些场景中使用并行网页抓取或者并行线程(thread)/ 进程仍然有些好处:从多个数据源(多个远程服务器)而不只是一个数据源收集数据;收集数据的同时,在已收集到的数据上执行时间更长 / 更复杂的操作(例如图像分析或者 OCR 处理);从大型 Web 服务收集数据,如果你已经付费,或者创建多个连接是使用协议允许的行为。1.进程和线程Python 既支持多进程(multi原创 2021-07-03 21:02:24 · 175 阅读 · 0 评论 -
14.避免抓取陷阱
避开抓取陷阱的目的是克服网站阻止自动抓取这个障碍。1.道德规范在抓取那些不想被抓取的网站时,其实存在一些完全符合道德和法律规范的理由。例如抓取客户信息后让服务器删除这些客户信息。虽然不太可能建立一个完全“防爬虫”的网站,但本章内容可以帮助人们保护自己的网站不被恶意攻击。禁止某一类信息的传播并不一定是件百利而无一害的事。注:这里演示的许多程序和介绍的技术都不应该在任何一个网站上使用。不仅因为这么做不好,而且你也可能会收到一封勒令停止警告信,甚至有可能发生更糟糕的事情。2.让网络机器人看着像人类原创 2021-07-02 16:08:51 · 161 阅读 · 0 评论 -
10.穿越网页表单与登录窗口进行抓取
之前和之后的网络爬虫在和 Web 服务器进行数据交互时,基本都是用 HTTP协议的 GET 方法去请求信息。POST方法,即把信息推送到 Web服务器进行存储和分析。就像网站的链接标记可以帮助用户发出 GET 请求一样,HTML 表单可以帮助用户发出 POST 请求。1.Python Requests库Requests 库就是一个擅长处理复杂的 HTTP 请求、cookie、header(响应头和请求头)等内容的 Python 第三方库。和任何 Python 第三方库一样,Requests 库也可以用原创 2021-05-25 11:06:28 · 310 阅读 · 0 评论 -
8.数据清洗
1.编写代码清洗数据语言学里有一个模型叫 n-gram,表示文字或语言中 n 个连续的单词组成的序列。在进行自然语言分析时,使用 n-gram 或者寻找常用词组,可以很容易地把一句话分解成若干个文字片段。维基百科词条“Python programming language”中找到的 2-gram 列表,代码如下:# -*- coding: GBK -*-from urllib.request import urlopenfrom bs4 import BeautifulSoupdef getN原创 2021-05-18 11:30:53 · 472 阅读 · 0 评论 -
12.利用API抓取数据
随着 JavaScript 和 Ajax 内容的生成和加载变得越来越普遍,解决该问题的方法之一:利用 Selenium 让浏览器自动加载网站并获取数据。本章完全不用理会 JavaScript(没有必要运行甚至是加载 JavaScript),直接获得数据源:生成数据的 API。1.API概述API 定义了允许一个软件与另一个软件通信的标准语法,即便是这两个软件是用不同的语言编写的或者是架构不同。本篇重点介绍 Web API(特别是允许 Web 服务器与浏览器交流的 API),,在其他上下文中,API原创 2021-06-02 16:00:13 · 5012 阅读 · 2 评论 -
7.读取文档
互联网最基本的特征:作为不同类型文件的传输媒介。互联网并不是一个 HTML 页面的集合。它是一个由多种类型的文档构成的集合,而 HTML 文件经常被用作展示文档的一个框架。1.文档编码文档编码的方式通常可以根据文件的扩展名进行判断。从根本上说,所有文档都是由 0 和 1 编码而成的。纯文本文件、视频文件和图像文件的唯一区别,就是它们的 0 和 1 面向用户的转换方式不同。2.纯文本读取网页纯文本文件,用以下代码读取:from urllib.request import urlopentextP原创 2021-05-17 19:05:29 · 240 阅读 · 0 评论 -
6.存储数据
随着数据不断增多,需要进行数据聚合和分析。3 种主要的数据管理方法,它们对绝大多数应用都适用。让爬虫把数据写入数据库;收集网上的文档,然后保存到你的硬盘里;每天定时收集当天累计的数据,就给自己发一封邮件。1.媒体文件存储媒体文件有两种主要方式:只获取文件 URL 链接,以及直接把源文件下载下来。只获取文件 URL 链接:耗费的流量更少,节省存储空间,代码更容易写,降低目标主机服务器的负载。存储外站URL被称为盗链(网站采取防盗链措施),链接文件在别人的服务器(被动),盗链容易改变或失效,下载文件会让原创 2021-05-16 17:37:10 · 223 阅读 · 0 评论 -
5.Scrapy
Scrapy提供了一个整洁的框架来帮你组织代码。1.安装Scrapya.在D盘的新建的文件夹web_crawler,命令行窗口进入到该文件夹下,执行命令python -m venv crawler_env,创建虚拟环境crawler_env,然后执行命令crawler_env\Scripts\activate激活虚拟环境。b.先安装wheel模块,pip install wheel,然后安装twisted模块,访问https://www.lfd.uci.edu/~gohlke/pythonlibs/#原创 2021-05-14 17:58:25 · 199 阅读 · 0 评论 -
4.网络爬虫模型
你可能需要灵活地控制要抓取哪些网站以及如何抓取,还需要一种在不需要编写很多代码的情况下,尽可能快地添加新网站或者修改已有网站的方法。1.规划和定义对象当决定抓取哪些数据时,最好的做法是忽视所有的网站。要自问“我需要什么?”,然后想方设法从中寻找所需信息。对你考虑的每一项都做一个清单检查,问自己:这个信息可以帮助项目实现目标吗?是否可有可无?信息可能之后需要抓取,后抓取的难度大吗?数据是否冗余?将数据存储在这个对象中是否符合逻辑?(例如产品在不同网站描述不一样,则无需存储描述信息)确定抓原创 2021-05-13 16:46:01 · 1142 阅读 · 0 评论 -
3.编写网络爬虫
我们经常需要用爬虫遍历多个页面甚至多个网站。之所以叫网络爬虫,是因为它们可以在 Web 上爬行。它们本质上就是一种递归方式。使用网络爬虫的时候,必须非常谨慎地考虑需要消耗多少带宽,还要尽力思考能不能让抓取目标的服务器负载更低一些。1.遍历单个域名六度分隔理论:把不相干的两个事物通过一个链条连接起来。获取一个页面上指向其他词条的所有链接:# -*- coding: GBK -*-from urllib.request import urlopenfrom bs4 import Beautiful原创 2021-05-12 19:43:05 · 298 阅读 · 0 评论 -
2.复杂HTML解析
是滴是滴原创 2021-05-11 21:26:56 · 254 阅读 · 0 评论 -
1.初见网络爬虫
1.1网络连接Web 浏览器是一个非常有用的应用,它创建信息的数据包,命令操作系统发送它们,然后把你获取的数据解释成漂亮的图像、声音、视频和文字。但是,Web 浏览器就是代码,而代码可以分解成许多基本组件,可重写、重用,以及做成我们想要的任何东西。urllib是Python的标准库(无需额外安装),包含了从网页请求数据,处理cookie,甚至改变像请求头和用户代理这些元数据的函数。urlopen用来打开并读取一个从网络获取的远程对象。# -*- coding:GBK -*-from urllib.原创 2021-05-10 20:23:08 · 187 阅读 · 0 评论