首页 > 编程语言 >《python网络爬虫和信息提取》:中国大学排名(附更改前后的代码)

《python网络爬虫和信息提取》:中国大学排名(附更改前后的代码)

时间:2022-11-25 11:33:07浏览次数:63  
标签:string python 校名 爬虫 信息提取 ulist print html tds

python网络爬虫和信息提取

   《python网络爬虫和信息提取》是北京理工大学的一门网络课程(中国大学MOOC(慕课))。

 

 

    偶然机会我在网上学习了这门课程,中国大学排名是老师在课程里举的一个例子。作为一个认真学习的python菜鸟,我把老师的代码认真敲打出来,一运行却出现问题。

 

 

    是老师的代码有问题么?我把网址输入浏览器,却打不开,搜索了一下,发现几年后的今天,原网站进行了升级,从域名到网站结构,都发生了翻天覆地的变化,原代码当然不适用了。但在网上搜索,还能看到原封不动照搬老师代码的所谓学习心得,误人不浅,故把自己真正的学习心得放到这里,供和我一样的菜鸟参考。

    首先打开网页对应清华大学排名源代码部分,对相关标签进行分析。

       经过分析发现,名次1是tds[0],校名“清华大学”却并不是单独的tds[1],而是和英文校名、双一流/211一起,都属tds[1],在原代码tds[1].string基础上修改为:

tds[1]('a')[0].string,tds[1]('a')[1].string,tds[1]('p')[0].string,分别提取出了校名、英文校名、双一流/211等信息,但不知为什么,用tds[2].string,tds[3].string没能正常提取出省市(北京)、类别(综合)的信息,仍显示为None,用tds[4].string可以正常提取总分(999.4)信息。请高手们指正。

    修改后的代码为:

import requests
import bs4
from bs4 import BeautifulSoup

def getHTMLText(url):
try:
r = requests.get(url, timeout=30)
r.raise_for_status()
print(r.request.url)
r.encoding = r.apparent_encoding
print(r.text[:1000])
return r.text
except:
# return ""
print('网页抓取失败!')

def fillUnivList(ulist,html):
soup = BeautifulSoup(html, "html.parser")
# print('title=',soup.title)
for tr in soup.find('tbody').children:
if isinstance(tr,bs4.element.Tag):
tds = tr('td') # 列表形式
# print('tds=',tds)
ulist.append([tds[0].string,tds[1]('a')[0].string,tds[1]('a')[1].string,tds[1]('p')[0].string,tds[2].string,tds[3].string,tds[4].string])
# print('title=', soup.title)
print('省市=',tds[2].string)
# print('校名2=', tds[1]('a')[0].string)
print('ulist=',ulist)

def printUnivList(ulist, num):
tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}"
# tplt = "{:^10}\t{:^6}\t{:^10}"
print(tplt.format("排名", "学校名称", "总分", chr(12288)))
# print('%s\t\t%s\t\t%s' %("排名","学校名称","总分"))

for i in range(num):
u = ulist[i]
# print('%s\t\t%s\t\t%s' %(u[0].strip('\n '),u[1],u[4].strip('\n '))) # 删除左边的空格
print(tplt.format(u[0].strip('\n '),u[1],u[6].strip('\n '), chr(12288)))

def main():
url = 'https://www.shanghairanking.cn/rankings/bcur/2022.html'
uinfo = []
html = getHTMLText(url)
fillUnivList(uinfo,html)
printUnivList(uinfo,20) # 20 univs

main()

 

标签:string,python,校名,爬虫,信息提取,ulist,print,html,tds
From: https://www.cnblogs.com/ydzhang/p/16924605.html

相关文章

  • Scrapy爬虫框架,入门案例(非常详细)源码
    一、概述Scrapy,Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试.......
  • Python 基础(一):入门必备知识
    教程源码下载sv20.com目录1标识符2关键字3引号4编码5输入输出6缩进7多行8注释9数据类型10运算符10.1常用运算符10.2运算符优先级基础进阶爬虫自动化数据分析......
  • 【Python】 文件夹压缩 zip
    文件夹压缩zipimportzipfilesrmdir_all_folder#文件夹路径print('原始文件夹路径:',srmdir_all_folder)zip_name='srmdir_all.zip'#压缩文件名称zip_file......
  • Selenium4+Python3系列(八) - Cookie、截图、单选框及复选框处理、富文本框、日历控件操
    我所在的城市昨天出了近20+的阳性案例,但这丝毫没有“影响”到996的工作时间,当然,也没有影响到我想继续更新文章的决心。一、cookie常用操作入门上一篇有写过关于cookie的......
  • Python3基于Centos7的安装
    0x00环境Centos7.9,默认已安装python2.7.50x01依赖软件yuminstallwgetzlib-develbzip2-developenssl-develncurses-develreadline-develtk-develgccmakezl......
  • 第十章python实训
    一、实验目的和要求1、掌握基本文件操作(创建、打开、关闭、写入);2、掌握目录操作的基本操作(创建、删除、遍历);3、了解高级文件操作(删除文件、获取文件基本信息)。二、实验......
  • python中and和or表达式的返回值
    aorb首先明确运算顺序,从左至右#其次只要存在真就会返回真,and返回的是最后一个真,or返回的是第一个真#再次,a,b中存在假,则and返回第一个假,or返回最后一个......
  • 学习《Python编程 从入门到实践》第二、三天
    近期比较忙,宝宝的预产期是12月17日,老婆每天都跟我说准备要生了。所以昨天看了一会就做家务活了,练习完后忘记写日记了。今天给补上。 为什么突然想学编程呢?其实是平常......
  • 在windows系统中搭建python编程环境
    Python环境可以安装在很多不同的系统中,我们python自学网主要考虑到绝大多数学员都是用的是Windows系统,所以就以Windows系统来给大家演示一下python安装的方法,后面也会更新......
  • Python获取当前在线设备ip和mac地址
    获取局域网所在的网段withos.popen("ipconfig/all")asres:forlineinres:line=line.strip()ifline.startswith("IPv4"):i......