python - 作业9:读取html格式数据(附代码)

python - 作业9:读取html格式数据


github指路 冲冲冲冲冲

----------------------------------原文–如下--------------------------------

2019/12/11 更新

/学院改名了/叫做→信息管理与人工智能学院了(在教务处看推荐课表的时候发现的,但是呢只是官网上的名字还没有改/毕竟没有这么注重细节?想改名就改名了听起来好像有点随便啊…

----------------------------------原文–如下--------------------------------

作业

先看下具体描述,大概意思就是从网络上读取一个特定的html脚本,再将里面的教师信息数据整合起来存成一个DataFrame的数据结构,然后在python里面print出来= =

作业要求
然后,比较复杂的一点就是因为是我们学校的官网(就是相比于官方的一些网站来讲)代码显得很没有条理……没办法= =

分析

所以这东西分析起来就比较烦的样子,首先我们要先,用眼睛找到这些数据在哪里……

所以说我打开了我们信工学院官网的教师介绍页面(全称是浙江财经大学信息管理与工程学院,希望几年之后他还是叫这个名字,因为emm听到风声说学院似乎要改名了)。大概是这个样子↓
教师介绍页面
先明确我们需要什么信息,怎么存储数据(这样可以少走弯路,当然这是在我写完作业之后才谜之总结出来的结果))))

和之前的那个读kml数据的作业一样先把所有的你可能要用的数据print出来看

(其实我觉得这种方法又蠢又高效,因为只有看到我代码里得到的信息,我才能和我想象中想要得到的信息放在一起对比—>错的话可以知道自己错在哪里,对的话离成功极近)

好的现在回答做这个作业我们需要什么信息,很简单我们需要教师名称,对应的职位(教授、副教授和讲师)就是表格前面的描述括号里面的是职称对应的人数,还有对应的个人主页(上面包括了这位老师的研究方向和个人科研成果之类的介绍,有助于= =大一新生选导师= =)

ok其实要拿到的信息也不是很多,一个个来,先看看这让人头痛的网页结构,右键 -> 检查可以查看网页源代码
截图

然后我们可以发现这个网页其实不是很复杂,只有600+行
截图

那我们要在源码里面把这个表格得到,它大概在这里
源码

所以我们要获取的资料是tr尖括号内的文本字符(也就是教师的姓名信息)怎么获取呢,看一下–>那啥老师上课时候的例子

例子

解释一下上面的doc就是获取的html里面的所有的信息,然后其中的links就是拿到里面所有的a标签的信息,因为a这个标签的话就是放置链接的专用标签可以这样说= =doc.findall('.//a')

然后links[0].text_content()的话就是获取a标签之间的文本信息,举个栗子:

<a href='#'>xxx</a>

(假设这个东西是links[0]也就是这个网页里面的第一条a的内容的时候)获取的links[0].text_content()就是xxx

ok那按照上面的操作,得到相应的a文本之后,尝试一下把他输出康康,
输出
因为数据太杂了,有很多没有用的东西

(等我写完作业之后w同学和我说了可以先捕捉到含有这个表格的div元素然后直接从这个div里面拿到相应的信息,我觉得我有点……)

这个是第二个for循环的输出,就是获取links里面的信息print出来的内容:
输出情况2

然后,这是tr里面的信息,也是有很多空格,我怀疑是里面的< br >搞得事情……但是我没有证据,就是我无法捕捉到这个东西我试着用’\n’ ‘\t’ ’ ’ 等等各种东西都试了一遍绝了,但是还是不对kjj

就是改不掉上实验课的时候我表现得极有耐心

(我真的服我自己,换句话说打代码的时间真是短暂啊,一下就 下课了)
输出情况3

但是好消息是我在下课前= =找到了把这东西去掉的方式,换句话说就是= =只输出有链接和教师信息的那些条数据= =

which means–>去掉了那些看起来很难搞的数据

我是怎么做到的(灵光一现,然后)我想到了一个判断条件,只要links里面的text_content和tds里面一样就输出if item.text_content() == j.text_content()(就这样)
漏网之鱼
非常好,但是还是有一些漏网之鱼,这种情况就直接特判跳出循环就可以了~

夸!

基础代码

随便 想想就知道怎么做了= =

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2019/11/5 11:15
# @Author : Chen Shan
# Function :Using Python to crawl useful data in HTML format and store it in dataframe data format

from lxml.html import parse
from urllib.request import urlopen
import pandas as pd

parsed = parse(urlopen('http://info.zufe.edu.cn/xygk/szdw.htm'))
doc = parsed.getroot()
strongs = doc.findall('.//strong')
links = doc.findall('.//a')
tds = doc.findall('.//td')

for i in strongs:
    print(i.text_content())
for j in links:
    print(j, j.get('href'), j.text_content())
for item in tds:
    print(item, item.text_content())
    
flag = 0
index = 1
dict = {'FULL_NAME':[], 'POSITION':[], 'HOME_LINK':[]}

for item in tds:
    for j in links:
    	//划重点,两者的交集= =
        if item.text_content() == j.text_content():
        	……
        ……

……

=-=-=-=-=-=-=-=-=-=-=更新分割线=-=-=-=-=-=-=-=-=-=-=

2020/02/04 更新code

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2019/11/5 11:15
# @Author : Chen Shan
# Function :Using Python to crawl useful data in HTML format and store it in dataframe data format

from lxml.html import parse
from urllib.request import urlopen
import pandas as pd

parsed = parse(urlopen('http://info.zufe.edu.cn/xygk/szdw.htm'))
doc = parsed.getroot()
strongs = doc.findall('.//strong')
links = doc.findall('.//a')
tds = doc.findall('.//td')

for i in strongs:
    print(i.text_content())
for j in links:
    print(j, j.get('href'), j.text_content())
for item in tds:
    print(item, item.text_content())

flag = 0
index = 1
dict = {'FULL_NAME':[], 'POSITION':[], 'HOME_LINK':[]}

for item in tds:
    for j in links:
        if item.text_content() == j.text_content():
            if item.text_content() == '信息管理系':
                flag=1
                break
            if j.get('href') != '../index.htm':
                if index <= 14:
                    position = 'Professor'
                elif index <= 45:
                    position = 'Associate professor'
                else:
                    position = 'Lecturer'
                index+=1
                dict['FULL_NAME'].append(j.text_content())
                dict['HOME_LINK'].append(j.get('href'))
                dict['POSITION'].append(position)
                print(j.text_content(),j.get('href'))
            break
    if flag == 1:
        break
data_frame = pd.DataFrame(dict)
print(data_frame)
### 回答1: Python期末大作业代码有50行。这是一个相对较短的代码量,但并不意味着它的功能或重要性较小。在这50行代码中,我可能使用了各种Python的特性和技巧,以实现特定目标。 根据具体的需求,这个期末大作业代码可以具体实施任何功能,例如图像处理、数据分析、网页爬虫等。无论是哪种应用,代码的结构和风格都应该尽可能简洁、高效和易读。 在这个代码中,我可能使用了条件语句(如if-else语句)来判断和控制程序的流程。我也可能使用了循环语句(如for循环或while循环)来重复执行某些操作。我还可能使用了函数和类来组织代码,提高复用性和模块化程度。 为了使代码更加可读和易于理解,我可能使用了注释来解释代码的作用和逻辑。我还可能为变量、函数和类使用有意义的名称,以便增强代码的可维护性。 除了代码本身,期末大作业代码还可能包括一些测试和验证的代码,以确保程序的正确性和稳定性。这些测试代码可以是单元测试、集成测试或用户交互测试,以尽可能覆盖代码中的各个方面。 综上所述,一个300字的Python期末大作业代码50行的实现,应该是一个经过精心设计和实践的代码。通过合理选择使用Python的特性和技巧,以及适当的注释和命名,提高了代码的可读性和可维护性。同时,代码中的测试代码也确保了程序的正确性和稳定性。 ### 回答2: Python期末大作业代码总共50行,主要使用了Python语言的各种基本语法和特性,实现了一个具体的功能。 首先,代码开头导入了需要使用的库,如requests库用于发送HTTP请求,BeautifulSoup库用于解析HTML页面等。 其次,定义了若干个函数用于实现不同的功能。例如,一个函数用于获取指定URL页面的HTML内容,另一个函数用于提取页面中的特定信息。 在代码的主体部分,首先定义了一些全局变量,如要分析的网页URL、需要提取的信息类型等。然后,代码通过调用之前定义的函数,获取并解析指定URL页面的HTML内容,再提取出需要的信息。 最后,代码通过输出结果或将结果保存到文件中的方式,展示运行结果。 总而言之,这个Python期末大作业代码总共50行,实现了特定的功能,通过调用函数、定义全局变量和处理数据等方式,完成了对指定URL页面的内容分析,并提取出特定的信息。代码简洁而高效,体现了Python语言的优势。 ### 回答3: Python期末大作业代码共50行。以下是对其中部分行的解释: 1. 导入所需模块: ```python import numpy as np import pandas as pd ``` 2. 加载数据: ```python data = pd.read_csv('data.csv') # 从CSV文件中读取数据 ``` 3. 数据预处理: ```python data.dropna() # 删除缺失值所在行 ``` 4. 特征工程: ```python X = data.iloc[:, :-1].values # 提取特征 y = data.iloc[:, -1].values # 提取标签 from sklearn.preprocessing import StandardScaler sc = StandardScaler() X = sc.fit_transform(X) # 特征缩放 from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) # 划分训练集和测试集 ``` 5. 构建模型: ```python from sklearn.linear_model import LogisticRegression classifier = LogisticRegression() # 构建逻辑回归分类器 classifier.fit(X_train, y_train) # 在训练集上拟合模型 ``` 6. 模型评估: ```python from sklearn.metrics import accuracy_score y_pred = classifier.predict(X_test) # 在测试集上进行预测 accuracy = accuracy_score(y_test, y_pred) # 计算准确率 print("准确率:", accuracy) ``` 这只是一个示例,说明了大作业代码的一部分。实际代码可能有更多功能和更复杂的处理逻辑,但总体来说,这是一个简洁且高效的代码,用于数据加载、预处理、特征工程、模型构建和评估。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值