【数据采集与融合技术】 第一次大作业

一、作业①

2020排名 全部层次 大学 总分
1 前2% 清华大学 1661.0
2
...

1、思路、代码和实验结果

1.1 思路

  • 获取网页文本

首先用urllib.request库发送请求,解析并获取网页的全部内容。

  • 逐行获取信息

整个表格是存于tbody里面,所以先用正则表达式提取出tbody的内容。
另外,每条数据都是存在tr里面的,获得tbody的内容后,可以利用正则表达式的finditer()的方法,获取每个tr,并构成列表,列表的每个元素就是一条记录。如下图所示:

  • 获取各个属性值

有了30个tr组成的列表之后,可以对tr逐个进行分析,并且用正则表达式匹配我们想要的字段。在此之前,先将换行符和空格进行清除,可以方便正则表达式的匹配。各个字段用到的正则表达式如下:

2020排名:r'<divclass="ranking"data-v-68e330ae>\d+</div>'

层次: r'前\d+%' 这个字段的属性可以很容易的通过“前”字匹配

学校:r'[\u4e00-\u9fa5]{2,20}' 表示2~20字的汉字,至少2个字是为了与“前”分开

得分:r'\d+.\d+' 有小数点的数字

2、心得体会

  • 运用正则表达式匹配要找到各个字段的规律,用最简单的表达式精准匹配各个字段。
  • 使用正则表达式之前可以将空白字符如换行符和空格除掉,这样匹配更方便,结果更准确。

二、作业②:

  • 要求:用requests和Beautiful Soup库方法设计爬取https://datacenter.mee.gov.cn/aqiweb2/ AQI实时报。
  • 输出信息:
序号 城市 AQI PM2.5 SO2 No2 Co 首要污染物
1 北京 55 6 5 1.0 225
2
......

1、思路、代码和实验结果

思路与作业1大致相同:

  • 审查元素寻找规律

通过观察发现每一条记录都存在tobdytr标签下,所以只需要获得每个tr的数据,就可以获取我们需要的信息。

  • 获取网页文本

    用requests库获取网页文本,并将文本用Beautiful解析

    soup = BeautifulSoup(data, 'html.parser')
    
  • beautifulsoupselect()方法搜索所有的tr

    lis = soup.select('tbody[id="legend_01_table"] tr')
    

    可以发现我们需要的信息都在每个trtd里面,所以可以很容易的利用text属性得到我们需要的信息

  • 代码:https://gitee.com/ZeLong-yAng/data-acquisition-and-fusion/blob/master/1/homework_2.py

  • 结果:

2、心得体会

  • 作业1和作业2都比较适合用Beautifulsoup爬取,方便快捷

三、作业③

1、思路、代码和实验结果

这个作业比较简单,首先进行网页的获取,需要特别注意的是,这个网站是采用http协议,用https是无法打开的。

  • 获取图片链接

然后可以用正则表达式匹配所有的图片,由于题目要求爬取的jpg图片,所以可以用以下正则表达式匹配:r'src=".*.jpg'。然后用字符串切片得出链接地址,此时是相对地址,所以要加上url得到绝对地址。

  • 下载图片

利用get方法可以下载图片

2、心得

相比于作业1和作业2,作业3更适合用re库直接匹配。所以在爬虫的设计过程中,要具体问题具体分析,灵活运用re和BeautifulSoup等各种工具,不能单纯只会用一种工具。

posted @ 2021-09-29 21:10  暴走大可可  阅读(83)  评论(0编辑  收藏  举报