本文中,我们将使用Python的requests和BeautifulSoup库来从指定的URL获取HTML内容,然后解析该内容并提取所需的数据。最后,我们将使用Python的print函数打印这些数据。
首先,我们定义了一个名为gethtml的函数,该函数接受一个URL作为输入,然后使用requests库的get方法获取该URL的内容。如果请求成功,该函数将返回获取的HTML内容;如果出现错误,该函数将返回"errors"。
接下来,我们定义了一个名为filehtml的函数,该函数接受一个zip和一个HTML字符串作为输入。然后,它使用BeautifulSoup库将HTML字符串解析为一个BeautifulSoup对象。该函数使用find_all方法查找所有的"tr"元素,然后遍历每个"tr"元素以查找其中的"td"元素。对于每个"td"元素,它将提取其字符串并将其添加到一个名为singleUniv的列表中,然后将该列表添加到zip中。最后,该函数返回zip。
然后,我们定义了一个名为printhtml的函数,该函数接受一个zip作为输入。它遍历zip中的每个元素(即singleUniv列表),并使用Python的print函数打印每个元素。打印每个元素后,它将打印一个空格(由end=" "指定),以便在打印下一个元素时在新行开始。
最后,我们定义了一个名为main的函数,该函数首先创建一个空的zip列表。然后,它调用gethtml函数获取指定URL的HTML内容,并将结果存储在html变量中。接下来,它调用filehtml函数将HTML内容解析为zip列表。最后,它调用printhtml函数打印zip列表中的所有元素。
运行main函数后,该程序将从指定的URL获取HTML内容,解析该内容并提取所有"td"元素的字符串,然后将这些字符串打印到控制
代码解释
# -*- coding: utf-8 -*-
# 这是一个Python文件的开头,它指定了文件的编码格式为UTF-8。
import requests as re
# 导入requests库,并将其重命名为re,以便在代码中更方便地使用。
from bs4 import BeautifulSoup
# 导入BeautifulSoup库,用于解析HTML和XML文件。
def gethtml(url):
try:
r = re.get(url,timeout=30)
# 使用requests库的get方法来请求指定的URL,并设置超时时间为30秒。
r.raise_for_status()#connect cope
# 如果请求成功,则不执行任何操作,如果请求失败,则引发HTTPError异常。
r.encoding = r.apparent_encoding
# 检测返回内容的编码方式,并将其设置为requests对象的编码。
return r.text
# 返回获取到的HTML内容。
except:
return "errors"
# 如果在获取HTML内容的过程中出现异常,返回字符串"errors"。
def filehtml(zip,html):
soup=BeautifulSoup(html,"lxml")
# 使用BeautifulSoup解析HTML字符串,将其转化为一个BeautifulSoup对象。
# 这里使用的是lxml解析器。
data1=soup.find_all("tr")
# 在HTML中查找所有的"tr"标签,即所有的表格行元素。
for child in data1:
# 遍历每个"tr"标签元素。
data2=child.find_all("td")
# 在每个"tr"标签元素中查找所有的"td"标签元素,即所有的表格单元格元素。
if len(data2) == 0:
# 如果一个"tr"标签元素中没有找到任何的"td"标签元素,说明该行是空的。
continue
# 跳过当前循环,进入下一轮循环。
singleUniv = []
# 创建一个空的列表,用于存储单个大学的HTML内容。
for td in data2:
singleUniv.append(td.string)
zip.append(singleUniv)
# 将每个"td"标签元素中的字符串添加到singleUniv列表中,然后将该列表添加到zip列表中。
# 这样,zip列表中的每个元素都是一个包含单个大学HTML内容的列表。
return zip
def printhtml(zip):
for i in range(len(zip)):
u=zip[i]
# 遍历zip列表中的每个元素,即每个包含单个大学HTML内容的列表。
# 将当前元素存储为u。
for j in range(len(u)):
# 遍历u列表中的每个元素。
print("{}".format(u[j]),end=" ")
# 打印u列表中的当前元素,并在元素之间添加空格。这里使用的是format方法来格式化输出。
def main():
# 定义主函数。
zip=[]
# 创建一个空的列表,用于存储结果。
url="http://www.weather.com.cn/textFC/hubei.shtml"
# 定义要请求的URL。这里是湖北省的天气网页。
html=gethtml(url)
# 获取该网页的HTML内容。
gethtml(url)
# 再次获取该网页的HTML内容,但是这里没有使用获取到的HTML内容,所以这个调用看起来有些多余。
filehtml(zip, html)
# 使用filehtml函数处理获取到的HTML内容,并将结果存储在zip列表中。
printhtml(zip)
# 打印处理后的结果。这里打印的是每个大学的名字和地址,它们都存储在zip列表的每个元素中。
# -*- coding: utf-8 -*-
import requests as re
from bs4 import BeautifulSoup
def gethtml(url):
try:
r = re.get(url,timeout=30)
r.raise_for_status()#connect cope
r.encoding = r.apparent_encoding
return r.text
except:
return "errors"
def filehtml(zip,html):
soup=BeautifulSoup(html,"lxml")
data1=soup.find_all("tr")
for child in data1:
data2=child.find_all("td")
if len(data2) == 0:
continue
singleUniv = []
for td in data2:
singleUniv.append(td.string)
zip.append(singleUniv)
return zip
def printhtml(zip):
for i in range(len(zip)):
u=zip[i]
for j in range(len(u)):
print("{}".format(u[j]),end=" ")
def main():
zip=[]
url="http://www.weather.com.cn/textFC/hubei.shtml"
html=gethtml(url)
gethtml(url)
filehtml(zip, html)
printhtml(zip)
main()