bs4中.string和.text之于html注释的作用

bs4中.string和.text之于html注释的作用


对于有注释的html文件:
请看注释部分
出现了一个好奇怪的现象:
就是再适用bs4的时候,对于之前书本上学到的.text和.string之间的关系,text用于一个大标签中有多个字符串的情况,会返回用空格隔开的一大串字符串;但是string则是再这个情况之下会失灵,对于多个字符串只能返回none

但是在此处,虽然只有一个字符串,但是在字符串中间出现了 这种情况。

我们要格外的注意:
有注释就不能适用string进行爬取,否则会返回none!应该使用text!
同时,text的返回值由于注释的存在会有很多空格,我们用.strip()即可去除
md,今天为了这个试了好久,难受

仔细观察上面的图片:
a开头的就可以适用:string
其他的td就必须用text
//我是分割线///
发表一个爬虫的用法,书上没有教过:
注意无序tag规避方法和a、tds的筛选方法
完整示范代码如下:

# coding=utf-8
import requests
from bs4 import BeautifulSoup
import bs4

ulist1=[]

def getHTMLText(url):#获取URL信息,输出内容
    try:
        r = requests.get(url,timeout = 30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return""

def fillUnivList(ulist,html):#将html页面放到ulist列表中(核心)
    soup = BeautifulSoup(html,"html.parser")
    for tr in soup.find('tbody').children:
        if isinstance(tr,bs4.element.Tag):#如果tr标签的类型不是bs4库中定义的tag类型,则过滤掉
            a = tr('a')
            tds = tr('td')#将所有的td标签存为一个列表类型
            # print(tds)
            ulist.append([tds[0].text.strip(), a[0].string.strip(), tds[4].text.strip()])#11.17更新后代码
            print(tds[0].string)
            # print(a[0].string)
            # print()
			#原来代码ulist.append([tds[0].string.strip(),a[0].string.strip(),tds[4].string.strip()])

def printUnivList(ulist1,num):#打印出ulist列表的信息,num表示希望将列表中的多少个元素打印出来
    #格式化输出
    tplt = "{0:^10}\t{1:{3}^12}\t{2:^10}"
    # 0、1、2为槽,{3}表示若宽度不够,使用format的3号位置处的chr(12288)(中文空格)进行填充
    print(tplt.format("排名","学校名称","总分",chr(12288)))
    for i in range(num):
        u = ulist1[i]
        print(tplt.format(u[0], u[1], u[2],chr(12288)))
    print()
    print("共有记录"+str(num)+"条")

def main():
    uinfo = [] #将大学信息放到列表中
    url = "https://www.shanghairanking.cn/rankings/bcur/2020"
    html = getHTMLText(url)
    fillUnivList(uinfo,html)
    printUnivList(uinfo,10)

main()

加油!

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
这段代码是一个简单的爬虫,用来从小说网站获取小说内容并保存到本地文件。 - 第一行导入了requests和BeautifulSoup库,用于从网站获取HTML内容并进行解析。 - 第二行导入了time和random库,用于在程序添加一定的延迟和随机数,以避免被网站识别为爬虫程序。 - 第三行定义了要爬取的网站的URL。 - 第四行定义了一个HTTP请求头,其包含了浏览器的信息,以模拟真实用户的访问行为。但是该行代码被注释掉了,因此并不会被使用。 - 第五行定义了一个新的HTTP请求头,其包含了浏览器的信息,用于发送HTTP请求。 - 第六行使用requests库向网站发起HTTP请求,并传入上面定义的请求头,获取网站的HTML内容。 - 第七行将获取到的HTML内容解析成BeautifulSoup对象。 - 第八行打印出整个HTML文档的文本内容。 - 第九行打印出整个HTML文档的title标签的文本内容。 - 第十行通过find_all()方法查找所有a标签,并将它们保存在一个列表。 - 第十一到第十七行遍历a标签列表,将符合条件的URL添加到一个新的列表。 - 第十九到第二十六行,使用with语句打开一个文件,遍历新的URL列表并依次获取每个URL的内容,将内容保存到文件,并在每次获取内容之后,随机等待一段时间,以模拟真实用户的访问行为。 - 最后一行打印出下载完毕的提示信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值