一个简单的小爬虫——奥运健儿信息爬取

轰轰烈烈而又满是槽点的里约奥运会已经结束好久了(吗),莘莘学子也迎来了又一年的开学季,即将投入到紧张的学习中去,然而,暑假收获的那一大堆老公老婆已经深深地烙进了我们的心中,跟着我们一起去学习,去努力,去奋斗......(额,编不下去了),总之呢,不管怎样,我就是写了个小爬虫,来爬取下今年参加奥运会的运动员信息(信息就在官网上,不算泄露吧???)
第一次写文章,好紧张,啊喂,废话好像太多了,开始放大招(zhuang bi)吧~
首先,网址放上来:http://www.olympic.cn/zt/Rio2016/chinateam/
这个网站下是各个项目的一个汇总,每点取一个项目后进入该项目下的运动员总体信息网页,然后再选定运动员到达个人信息网页,所以我们要从第一个网址获取团体运动员信息链接,然后再从这个链接获取运动员个人信息链接。
第一步,解析汇总网页并得到团队信息的链接:

url="http://www.olympic.cn/zt/Rio2016/chinateam/"
#请求网址
wb_data=requests.get(url)
#解析网址
soup=BeautifulSoup(wb_data.text.encode("utf8"),"lxml")
#根据网页的CSS路径得到下一个网址的链接
links=soup.select('body > div.page_bodyer > div > div.sports_list > div > a')
for link in links:  
       url=link.get('href')  

这样,我们就得到了每一个团体的链接信息,然后据其得到每个运动员的链接信息,为了方便,我们需要定义一个函数,如下:

#得到运动员个人信息链接
#url为上一级传过来的参数
def more_news(url):   
        wb_data = requests.get(url)   
        soup = BeautifulSoup(wb_data.text.encode("utf-8"), "lxml")                    
        presons_links=soup.select('body > div.page_bodyer > div > div >  div.sports_team_player_list > div > a')    
        more_link=link.get('href') 
        #由于得到的链接不全,在这里我们要把它补全   
        url="http://2016chinateam.olympic.cn/"+more_link       

接下来,我们就可以到运动员个人信息的网站耍耍啦~

def person_data(url): 
      wb_data = requests.get(url)    
      soup = BeautifulSoup(wb_data.text.encode("utf-8"), "lxml")
      #观察网址后我们发现,所有的运动员信息都在一个td标签下,所以用一个find_all函数就可以解决了
      names=soup.find_all("td")
     #定义一个列表,用来存储爬取的信息
      person = []
      for name in names:    
              ming=name.get_text()   
              person.append(ming)
    #为了存储方便,将列表中的信息存入一个字典
      for data in person:       
              detial={           
                   "name":person[0],            
                    "sex":person[1],           
                    "both":person[2],            
                    "stature":person[4],            
                    "weight":person[5],            
                    "title":person[6],            
                    "registered":person[7],           
                    "project":person[8],           
                    "homeplace": person[3],      
                    }  
    #然后,我们还要把爬取的信息存入一个记事本中
     with open('1.txt', 'a') as f:   
               f.write("\n")    
               for each in detial:        
                        write_str = str(each) + ': ' + detial[each] + '      '                         
                        f.write(write_str)            

这样,一个简单的爬虫框架似乎就完成了,接下来,我们就要在这个框架上添加东西,把他们有效的组织起来。

#导入我们需要的库
import requests
from bs4 import BeautifulSoup
import time

#第一个函数,根据团体信息获取个人信息链接
def more_news(url):   
      wb_data = requests.get(url)    
      soup = BeautifulSoup(wb_data.text.encode("utf-8"), "lxml") 
     #得到标签中的信息      
      presons_links=soup.select('body > div.page_bodyer > div > div > div.sports_team_player_list > div > a')  
     #这是一个延时函数 
      time.sleep(2)    
      for link in presons_links:  
               #提取链接信息     
               more_link=link.get('href') 
               #组装链接,得到个人信息的链接             
               url="http://2016chinateam.olympic.cn/"+more_link
               #将链接传入获取个人信息的函数           
               person_data(url)

#第二个函数,获取个人信息的函数
def person_data(url): 
     #将i定义为全局变量   
      global i    
      wb_data = requests.get(url)    
      soup = BeautifulSoup(wb_data.text.encode("utf-8"), "lxml") 
      #找到td标签下的个人信息,并存入一个列表中        
      names=soup.find_all("td")    
      person = []    
      for name in names:        
                ming=name.get_text()        
                person.append(ming)
      #由于在爬取的过程中遇到编码问题,我们用一个try绕过他   
       try:      
               #正常情况,存入字典,并保存至记事本 
                for data in person:           
                           detial={               
                                    "name":person[0],            
                                    "sex":person[1],           
                                    "both":person[2],            
                                    "stature":person[4],            
                                    "weight":person[5],            
                                    "title":person[6],            
                                    "registered":person[7],           
                                    "project":person[8],           
                                     "homeplace": person[3],            
                                  }        
                  with open('1.txt', 'a') as f:           
                             f.write("\n")            
                             for each in detial:               
                                      write_str = str(each) + ': ' + detial[each] + '      '                
                                      f.write(write_str)  
                                      #每存入一个信息,便输出一个相应的数字      
                                      i=i+1        
                                      print(i)  
        #异常情况,并将出错的地方输出 
        except UnicodeEncodeError:                         
           print(person)

i=0
#第一页链接信息
url="http://www.olympic.cn/zt/Rio2016/chinateam/"
#请求并解析网页
wb_data=requests.get(url)
soup=BeautifulSoup(wb_data.text.encode("utf-8"),"lxml")
links=soup.select('body > div.page_bodyer > div > div.sports_list > div > a')
#将得到的每一个团队链接进行循环,并传入more_news函数
for link in links:  
       url=link.get('href')   
       more_news(url)

这样,我们的程序就算完成了,然后运行,看着数字一个一个蹦出来好开心,也不枉这么长时间的学习,刚学爬虫的小伙伴们赶紧试起来吧~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,311评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,339评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,671评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,252评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,253评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,031评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,340评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,973评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,466评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,937评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,039评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,701评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,254评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,259评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,497评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,786评论 2 345

推荐阅读更多精彩内容