数据采集第一次作业_031904129朱贝尔

作业1

  • 要求:用urllib和re库方法定向爬取给定网址(https://www.shanghairanking.cn/rankings/bcsr/2020/0812 )的数据。

  • 输出信息:

    2020排名 全部层次 学校类型 总分
    1 前2% 中国人民大学 1069.0
    2......
  • 1) 解题过程

    • 1.1 获取HTML函数

      def GetHTML(url):
          try:
              http = urllib.request.urlopen(url)#完成简单的请求和网页抓取,返回值类型是一个HTTPResponse对象
              data = http.read()#得到返回的网页内容
              data = data.decode()#解码
              #print(type(data))
              data = data.replace("\n","")#将换行符去除
              return data
          except Exception as err:
              print(err)
      
    • 1.2 正则匹配

      def GetText(text):
          try:
              Uni_Rank = re.findall(r'class="ranking" data-v-68e330ae>(.*?)</div>',text)
              Uni_Name = re.findall(r'class="name-cn" data-v-b80b4d60>(.*?)</a>', text)
              Uni_Level = re.findall(r'<td data-v-68e330ae>(.*?)</td></tr>', text)
              Uni_Score = []#利用列表获取学校分值
              for j in Uni_Level:
                  Uni_Score.append(re.findall(r"<td data-v-68e330ae>                    (.*?)                    ", j))
              #print(Uni_Rank[0])测试匹配结果
              #$print(Uni_Name[0])测试匹配结果
              #print(Uni_Score)测试匹配结果
              for i in range(len(Uni_Rank)):
                  Uni_Rank[i] = Uni_Rank[i].replace(" ","")
              return Uni_Name,Uni_Rank,Uni_Level,Uni_Score
          except Exception as err:
              print(err)
      
    • 1.3 打印函数

      def ShowText(Uni_Name,Uni_Rank,Uni_Level,Uni_Score):
          try:
              print('%-14s %-11s %-15s %-10s %-0s' % ("学校排名","学校层次","学校名称","总分",chr(12288)))
              for i in range(len(Uni_Level)):
                  print('%-13s %-15s %-12s %-12s %-10s' % (Uni_Rank[i],Uni_Score[i][0],Uni_Name[i],Uni_Score[i][1],chr(12288)))
          except Exception as err:
              print(err)
      
    • 1.4 结果显示

  • 2)心得体会

    • 不使用BeautifulSoup让自己更加的熟悉re正则的运用
    • 知悉在处理文本时应处理一些细节问题,如空格,换行符等
  • 代码地址: https://gitee.com/zhubeier/zhebeier/blob/master/数据采集第一次作业/第一题

作业二

  • 要求 用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.1 主要函数

      def GetHTML(url):#获取HTML内容
          try:
              header = {"User-Agent":"Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; en-US; rv:1.9pre) Gecko/2008072421 Minefield/3.0.2pre"}
              req = requests.get(url,headers = header)
              req.raise_for_status()
              req.encoding = req.apparent_encoding
              return req.text
          except Exception as err:
              print(err)
      def GetText(text):#获取文本
          try:
              soup = BeautifulSoup(texte,'lxml')
              new_text = soup.select('td[style="text-align: center; "]')
              #print(type(new_text))
              #print(new_text)
              return new_text
          except Exception as err:
              print(err)
      def Show(text):#打印结果
          try:
              j = 1
              print("{:^10}\t{:^10}\t{:^10}\t{:^10}\t{:^10}\t{:^10}\t{:^10}\t{:^10}".format('序号','城市','AQI','PM2.5','SO2','NO2','CO','首要污染物'))
              for i in range(0,len(new_text),9):
                  print("{:^10}\t{:^8}\t{:^10}\t{:^10}\t{:^10}\t{:^10}\t{:^10}\t{:^10}".format(j,new_text[i].text,new_text[i+1].text,new_text[i+2].text,new_text[i+4].text,new_text[i+5].text,new_text[i+6].text,new_text[i+8].text.strip()))#strip:移除空格
                  j += 1
              print(len(new_text))
          except Exception as err:
              print(err)
      
    • 1.2 结果显示

  • 心得体会

    • 熟悉了requests库和urllib.request库的区别。
    • 熟悉了利用BeautifulSoup处理HTML文档,并利用find_all方法寻找所需元素。
  • 代码地址 https://gitee.com/zhubeier/zhebeier/blob/master/数据采集第一次作业/第二题

作业三

  • 要求:使用urllib和requests爬取(http://news.fzu.edu.cn/),并爬取该网站下的所有图片
  • 输出信息:将网页内的所有图片文件保存在一个文件夹中
  • 1)解题过程
    • 1.1 主要函数
      def GetHtml(url):#获取url内容
          try:
              header = header = {"User-Agent": "Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; en-US; rv:1.9pre) Gecko/2008072421 Minefield/3.0.2pre"}#加上头伪装
              req = requests.get(url,headers=header)
              req.raise_for_status()
              req.encoding = req.apparent_encoding
              return req.text
          except Exception as err:
              print(err)
      
      def GetImage(text):
          try:
              reg = 'src="(.*?).jpg"'#正则表达式
              list_jpg = re.compile(reg).findall(text)#利用正则表达式找到图片的路径
              #print(image_list)
              for i in range(0,len(list_jpg)):
                  image_url = 'http://news.fzu.edu.cn/'+list_jpg[i]#图片保存的路径
                  file = "D:/FZU_img/" + "第" + str(i) + "张" + ".jpg"#为图片命名(需要先创建相应的文件夹)
                  urllib.request.urlretrieve(image_url,filename=file)#(将图片下载到本地文件夹)
              reg = 'src="(.*?).png"'  # 正则表达式
              list_png = re.compile(reg).findall(text)
              for i in range(0,len(list_png)):
                  image_url = 'http://news.fzu.edu.cn/'+list_png[i]#图片保存的路径
                  file = "D:/FZU_img/" + "第" + str(i) + "张" + ".png"#为图片命名(需要先创建相应的文件夹)
                  urllib.request.urlretrieve(image_url,filename=file)#(将图片下载到本地文件夹)
          except Exception as err:
              print(err)
      
      
    • 1.2 结果显示
  • 2)心得体会
    • 学会了利用urllib.request.urlretrieve将网页图片保存到本地
    • 更加熟悉了findall正则匹配查找所需内容
  • 代码地址https://gitee.com/zhubeier/zhebeier/blob/master/数据采集第一次作业/第三题
posted @ 2021-10-05 11:49  施一念  阅读(91)  评论(0编辑  收藏  举报