基于bs4+requests爬取世界赛艇男运动员信息(进阶篇)

在详情页面,部分页面具有5个字段信息,部分页面具有2个字段信息。 每个字段信息都在li标签中,对每个li标签做循环遍历。 将li标签中的第1个class等于dt的div标签作为字典的键,将li标签中的第1个class等于dd的div标签作为字典的值。 将数据收集结果item_list数据持久化为excel时,对变量item_list进行循环遍历,excel表格的字段名要赋值为最长字段的字典的所有字段。

from bs4 import BeautifulSoup as bs
import requests

response = requests.get('http://www.worldrowing.com/events/2018-world-rowing-under-23-championships/u23-mens-eight/')
soup = bs(response.text, 'html.parser')
athlete_list = soup.select('tr.resultsDetails li')
item_list = []
for athlete in athlete_list:
    item = {}
    item['name'] = athlete.select('h4 a')[0].text
    item['position'] = athlete.select('p.yPadding')[0].text.strip()
    item['img_url'] = 'http://www.worldrowing.com' + athlete.select('img')[0]['src']
    detail_url = 'http://www.worldrowing.com' + athlete.select('h4 a')[0]['href']
    response = requests.get(detail_url)
    soup = bs(response.text, 'html.parser')
    li_list = soup.select('div.athleteInfoBody li')
    for li in li_list:
        key = li.select('div.dt')[0].text
        value = li.select('div.dd')[0].text
        item[key] = value
    item_list.append(item)

longest_keys = item_list[0].keys()
for item in item_list:
    if len(item.keys()) > len(longest_keys):
        longest_keys = item.keys()
        
import pandas as pd
df = pd.DataFrame(item_list, columns=longest_keys)
df.to_excel('athleteRecord3.xlsx')

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏用户2442861的专栏

在 PyQt4 中的菜单和工具栏¶

http://www.cppblog.com/mirguest/archive/2012/02/05/164982.html

942
来自专栏宋凯伦的技术小栈

【工作中学习1】两个设计模式:Singleton(单例)和 Adapter(适配器)

  好久没有写自己的学习小文章,罪过罪过。。最近本菜鸟在项目中接触到经常用到的设计模式,首先是Singleton(单例),这个相信大家都会用到很多,所以自己用代...

2015
来自专栏用户2442861的专栏

在 PyQt4 中的菜单和工具栏¶

QtGui.QMainWindow 类提供了一个应用的主窗口。这使得我们可以创建典型的应用框架,包括状态栏,工具栏和菜单。

861
来自专栏柠檬先生

jquery鼠标事件

click()   为点击事件绑定一个事件处理函数,或者触发元素点击事件。   .click( handler(eventObject) ) ...

1887
来自专栏我和未来有约会

(收藏)JS验证

1 /* 2 函数名:检验表单的函数 3 作者:xuwen 日期:2007-2-10 4 参数 _obj:验证的对象 ...

21810
来自专栏Golang语言社区

【Go 语言社区】在golang里实现类似try catch 的异常处理机制

此文介绍的并非 使用panic/recover. 因为实际使用中不建议使用panic/recover. 但try catch finally 的编程方式 还是...

3696
来自专栏技术小讲堂

ASP.NET AJAX(13)__利用Microsoft AJAX Library开发客户端组件Sys.Component成员Sys.IDisposable成员Sys.INotifyDisposin

Microsoft AJAX Library定义了一个客户端组件的模型,它的基类是Sys.Component,它实现了三个接口Sys.IDisposable,S...

3355
来自专栏LeoXu的博客

Flex笔记_MX DataGrid、列表和树

columnCount、columnWidth、dataProvider、iconField、iconFunction、labelField、labelFun...

1082
来自专栏进击的君君的前端之路

定时器

1746
来自专栏超然的博客

HTML5 data-* 自定义属性

  在HTML5中添加了data-*的方式来自定义属性,所谓data-*实际上上就是data-前缀加上自定义的属性名,使用这样的结构可以进行数据存放。使用dat...

1152

扫码关注云+社区