html源-下载网页和HTML网页源代码

requests.exceptions.HTTPError:404客户端错误:未找到

raise_for_status() 方法是确保程序在发生错误下载时停止的好方法。 这是一件好事:您希望程序在发生意外错误时立即停止。 如果下载失败不会影响您的程序,您可以使用 try 和 except 语句包装 raise_for_status() 行,以处理此错误情况而不会崩溃。

import requests
res = requests.get('http://inventwithpython.com/page_that_does_not_exist')
try:
    res.raise_for_status()
except Exception as exc:
    print('There was a problem: %s' % (exc))

出现问题:404 客户端错误:未找到 url:

此 raise_for_status() 方法调用导致程序输出以下内容:

出现问题:404 客户端错误:未找到

调用 request.get() 后,始终调用 raise_for_status()。 在程序继续之前,您需要确保下载确实有效。

将下载的文件保存到硬盘

html源_html中嵌套html_html引入html的js

从这里,您可以使用标准的 open() 函数和 write() 方法将网页保存到硬盘上的文件中。 但也有一些细微的差别。 首先,必须通过将字符串“wb”作为 open() 的第二个参数传递来以写入二进制模式打开文件。 即使页面是纯文本(例如您之前下载的罗密欧与朱丽叶文本),您也需要对二进制数据而不是文本数据进行编码,以保持文本的 Unicode 编码。

统一编码

Unicode 编码超出了本书的范围,但您可以从如下网页了解更多信息:

要将网页写入文件,可以将 for 循环与 Response 对象的 iter_content() 方法结合使用。

import requests
res = requests.get('https://automatetheboringstuff.com/files/rj.txt')
res.raise_for_status()
playFile = open('RomeoAndJuliet.txt', 'wb')
for chunk in res.iter_content(100000):
    playFile.write(chunk)

playFile.close()

iter_content() 方法在循环的每次迭代中返回内容的“块”。 每个块都是字节数据类型,您可以指定块的每个位将包含多少个字节。 十万字节通常是一个不错的大小,因此将 100000 作为参数传递给 iter_content()。

html源_html引入html的js_html中嵌套html

文件 RomeoAndJuliet.txt 现在将存在于当前工作目录中。 请注意,虽然网站上的文件名为 rj.txt,但硬盘上的文件具有不同的文件名。 请求模块仅处理网页内容的下载。 下载页面后,它只是程序中的数据。 即使您在下载网页后失去了互联网连接,所有页面数据仍保留在您的计算机上。

write() 方法返回写入文件的字节数。 在后一个示例中,第一个块中有 100,000 字节,文件的其余部分只有 78,981 字节。

查看一下,下面是下载和保存文件的完整过程:

您可以了解请求模块的其他功能。

超文本标记语言

在下载网页之前,您将学习一些 HTML 基础知识。 您还将了解如何访问 Web 浏览器强大的开发人员工具,这将使从 Web 获取信息变得容易。

HTML学习资源

超文本标记语言(HTML)是网页编译的格式。 本章假设您有一些 HTML 的基本经验,但如果您需要初学者教程,我推荐以下网站之一:

快速准备考试

如果您看过任何 HTML,这是一个简短的概述。 HTML 文件是带有 .html 文件扩展名的纯文本文件。 这些文件中的文本被标签包围,这些标签是括在尖括号中的短语。 该标签告诉浏览器如何低框架页面。 开始标记和结束标记可以包含一些文本来生成元素。 文本(或内部 HTML)是开始标记和结束标记之间的内容。 例如html源,以下 HTML 将显示 Hello world! 在浏览器中,以斜体显示:

Hello world!

你好世界

<code class="hljs language-" strong="strong" style="font-size: 0.85em; font-family: Consolas,Inconsolata,Courier,monospace; margin: 0px 0.15em; white-space: pre; overflow: auto; border-radius: 3px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); -moz-border-top-colors: none; -moz-border-right-colors: none; -moz-border-bottom-colors: none; -moz-border-left-colors: none; display: block !important; padding: 0.5em; color: rgb(51, 51, 51); background: rgb(248, 248, 248) none repeat scroll 0% 0%; -moz-text-size-adjust: none;">
HTML中有许多不同的标签。这些标签中的某些标签具有在尖括号内的属性形式的额外属性。 tag encloses text that should be a link." onmouseover="this.style.backgroundColor='#ebeff9'" onmouseout="this.style.backgroundColor='#fff'">例如,标签包含应该是链接的文本。文本链接到的URL由href属性确定。这里有一个例子:
HTML中有许多不同的标签。这些标签中的某些标签具有在尖括号内的属性形式的额外属性。 例如, ``` ``` 标签包含应该是链接的文本。 链接到的URL是由```href```属性决定的 这里有一个例子:
---
(

Al 的免费 Python 书籍。```)

Al 的免费 Python 书籍

某些元素具有唯一标识页面上元素的 id 属性。 您经常会指示程序通过 id 属性查找元素,因此使用浏览器的开发人员工具查找元素的 id 属性是编写网页抓取程序的常见任务。

查看网页的源代码

您需要查看程序将使用的网页的 HTML 源代码。 为此,请右键单击(或在 OS X 上单击)Web 浏览器中的任何网页,然后选择“查看源代码”或“查看页面”以查看该页面的 HTML 文本(见图)。 这是您的浏览器收到的实际文本。 浏览器知道如何通过该 HTML 显示或呈现网页。

我强烈建议您查看一些您最喜欢的网站的 HTML 源代码。 如果您在查看源代码时不能完全理解所听到的内容,那也没关系。 您不需要 HTML 知识来编写简单的网络抓取工具,毕竟您不会编写自己的网站。 您只需要足够的知识即可从现有网站购买数据。

打开浏览器的开发工具

html中嵌套html_html源_html引入html的js

除了查看网页的源代码之外,您还可以使用浏览器的开发人员工具查看页面的 HTML。 在 Chrome 和 Windows 版 Internet Explorer 中,开发人员工具已安装,您可以按 F12 来显示它们(参见图片)。 再次按 F12 会使开发者工具消失。 在 Chrome 中,您还可以通过选择“查看开发人员开发工具”来打开开发人员工具。 在 OS X 中,按“OPTION-I”将打开 Chrome 的开发人员工具。

在 Firefox 中,您可以通过在 Windows 和 Linux 上按 CTRL-SHIFT-C 或在 OS X 上按 -OPTION-C 来启动 Web 开发人员工具检查器。其布局几乎与 Chrome 的开发人员工具相同。

在浏览器中启用或安装开发人员工具后,您可以右键单击网页的任何部分,然后从上下文菜单中选择“检查元素”以显示该页面该部分的 HTML。 当您开始解析网络抓取工具的 HTML 时,这尤其有用。

不要使用正则表达式来解析 HTML

在字符串中查找特定的 HTML 片段实际上是正则表达式的完美案例。 但是,我建议您不要这样做。 有许多不同形式的 HTMLhtml源,它们带有连字符,但仍被视为有效的 HTML,但尝试捕获正则表达式中所有此类可能的变体可能是乏味且容易出错的。 专门用于解析 HTML 的模块(例如 Beautiful Soup)不太可能导致错误。

你可以找到一个扩展参数 为什么你不应该使用正则表达式来解析 HTML