第一个简单的python爬虫:爬取ATP男子网球世界排名

来源:互联网 发布:叶子老师沪江辞职知乎 编辑:程序博客网 时间:2024/05/01 06:50

背景:

        作为一个网球爱好者,平时也特别关注各大满贯赛事,初学python爬虫,所以想通过网络爬虫爬取一下最新的ATP排名。

 

设计:

  • 网页选取:由于大部分排名网站都是动态网页,有JS代码,所以网站的筛选很重要,浏览了许多网站的源码,发现http://www.8tennis.com/比较符合要求,所以选取了http://www.8tennis.com/rank-atp/页面作为URL来源。

  • 函数一:getHTMLText,主要用于与URL界面建立连接,用到了request库。

 

  • 函数二:fillUnivListMan,主要用于从URL界面获取列表,用到了beautifulsoup库。

     

    主要问题是在<table>标签的识别上由于html代码中有多个<table>标签,经过对比之后发现cellspacing属性是不同的,故加入attrs属性判断来获取特定的<table>标签。

     

  • 函数三:printTennisListMan,主要用于打印排名列表,并对打印结果进行优化,使其更加美观。

     

  • 结果展示:

 

  • 后续考虑:对ATP男子网球运动员的地区进行一下统计,看看各地区的分布情况。

  • python代码如下:

#Tennis.pyimport requestsfrom bs4 import BeautifulSoupimport bs4def getHTMLText(url):    try:        r = requests.get(url, timeout=30)        r.raise_for_status()        r.encoding = r.apparent_encoding        return r.text    except:        return ""def fillTennisListMan(ulist, html):    soup = BeautifulSoup(html, "html.parser")    for tr in soup.find('table',attrs={"cellspacing": 1}).children:        if isinstance(tr, bs4.element.Tag):            tds = tr('td')            ulist.append([tds[0].string, tds[2].string, tds[3].string])def printTennisListMan(ulist, num):    tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}"    for i in range(num):        u=ulist[i]        print(tplt.format(u[0],u[1],u[2],chr(12288)))    def main():    uinfoman = []    urlman = 'http://www.8tennis.com/rank-atp/'    print("ATP当前排名:")    htmlman = getHTMLText(urlman)    fillTennisListMan(uinfoman, htmlman)    printTennisListMan(uinfoman, 21) # 21 univs    main()



0 0
原创粉丝点击