如果是网络开发或编程的新手,理解如何发送GET请求可能会有些困难。本文将向展示如何使用Python编程语言发送GET请求,以及如何解析返回的HTML内容。
超文本传输协议(HTTP)是一组规则,用于在服务器和客户端之间传递和解释超文本标记语言(HTML),即构建网站的语言。HTTP包含多种请求方法,其中最常用的是GET请求。当在Google搜索栏中搜索“hello world”时,浏览器(客户端)会向Google服务器发送GET请求,以获取与“hello world”相关的网站列表。Google服务器随后会响应GET请求,返回与所输入的URL关联的资源(通常是网页)。
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)
除了美化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())