爬虫实例四

本文中,我们将使用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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值