使用Python进行GET请求和HTML解析

如果是网络开发或编程的新手,理解如何发送GET请求可能会有些困难。本文将向展示如何使用Python编程语言发送GET请求,以及如何解析返回的HTML内容。

超文本传输协议(HTTP)是一组规则,用于在服务器和客户端之间传递和解释超文本标记语言(HTML),即构建网站的语言。HTTP包含多种请求方法,其中最常用的是GET请求。当在Google搜索栏中搜索“hello world”时,浏览器(客户端)会向Google服务器发送GET请求,以获取与“hello world”相关的网站列表。Google服务器随后会响应GET请求,返回与所输入的URL关联的资源(通常是网页)。

发送GET请求

Python的urllib库包含一个名为urlopen("url")的函数,它向指定的URL发送GET请求,并返回一个HTTPResponse对象。HTTPResponse对象有一个read()方法,该方法返回与网页关联的HTML。

以下是使用Python发送GET请求的代码示例:

from urllib.request import urlopen codeProjectHtml = urlopen("http://www.codeproject.com/") print(codeProjectHtml.read())

虽然可以看到HTML,但由于缺乏缩进,阅读起来很困难。可以使用BeautifulSoup库,并在现有代码中添加一行,来使HTML更易于阅读:实例化一个BeautifulSoup对象,并传递给它两个参数:一个是codeProjectHtml.read()返回的HTML,另一个是字符串“html.parser”,这指示BeautifulSoup实例使用Python的默认解析器库。

以下是使用BeautifulSoup的代码示例:

from urllib.request import urlopen from bs4 import BeautifulSoup codeProjectHtml = urlopen("http://www.codeproject.com/") bsInstance = BeautifulSoup(codeProjectHtml.read(), "html.parser") print(bsInstance)

GET请求的实践应用

除了美化HTML,BeautifulSoup还可以搜索HTML中的元素、属性和文本。让通过一个练习来学习如何使用BeautifulSoup搜索元素:让找出在www.codeproject.com上在线的成员数量。解决这个练习需要四个步骤:

步骤1:获取HTML

codeProjectHtml = urlopen("http://www.codeproject.com/")

步骤2:使用Chrome DevTools确定元素

Chrome DevTools是Chrome内置的一组调试工具,可以通过右键点击元素并选择“检查”来找到任何元素的HTML。

步骤3:使用BeautifulSoup搜索元素

bsInstance = BeautifulSoup(codeProjectHtml.read(), "html.parser") memberMenu = bsInstance.find("div", {"id": "ctl00_MemberMenu_GenInfo"})

步骤4:打印结果

print(memberMenu.get_text())

完整代码

from urllib.request import urlopen from bs4 import BeautifulSoup codeProjectHtml = urlopen("http://www.codeproject.com/") bsInstance = BeautifulSoup(codeProjectHtml.read(), "html.parser") memberMenu = bsInstance.find("div", {"id": "ctl00_MemberMenu_GenInfo"}) print(memberMenu.get_text())

练习

让尝试找出在www.codeproject.com上搜索“Python”时出现的第一篇文章的名称。

步骤1:获取HTML

codeProjectPythonSearchHtml = urlopen("http://www.codeproject.com/search.aspx?q=python")

步骤2:使用Chrome DevTools确定元素

步骤3:使用BeautifulSoup搜索元素

bsInstance = BeautifulSoup(codeProjectPythonSearchHtml.read(), "html.parser") firstArticle = bsInstance.find("a", {"id": "ct100_MC_Results_ct100_DocTitle"})

步骤4:打印结果

print(firstArticle.get_text())

完整代码

from urllib.request import urlopen from bs4 import BeautifulSoup codeProjectPythonSearchHtml = urlopen("http://www.codeproject.com/search.aspx?q=python") bsInstance = BeautifulSoup(codeProjectPythonSearchHtml.read(), "html.parser") firstArticle = bsInstance.find("a", {"id": "ct100_MC_Results_ct100_DocTitle"}) print(firstArticle.get_text())
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485