【问题标题】:Extracting items out of an element.ResultSet从 element.ResultSet 中提取项目
【发布时间】:2018-09-02 09:17:44
【问题描述】:

我发现了一个很酷的 python 脚本,它可以从NFL rosters 中刮取玩家信息。但是我想将 NFL 组合结果添加到数据中。我在下面为一位玩家提供了一个示例。

import urllib.request
from bs4 import BeautifulSoup

URL2 = 'www.nfl.com/player/deandrewwhite/2552657/combine'
soupCombine = BeautifulSoup(urllib.request.urlopen(URL2))
Combinestats = soupCombine.find_all("div", attrs = {"class": "tp-title"})
Combinestats[0].contents

生产:

['3 Cone Drill', < span class="tp-results">6.97 secs< /span>]

如何从 Combinestats[0].contents 中获取以下信息?

DrillName = '3 Cone Drill'

DrillResult = 6.97

Combinestats 中的项目供参考。

for ii in range(len(Combinestats)):
     print(Combinestats[ii].contents)

['3 Cone Drill', <span class="tp-results">6.97 secs</span>]
['40 Yard Dash', <span class="tp-results">4.44 Secs</span>]
['Broad Jump', <span class="tp-results">118.0 inches</span>]
['20 Yard Shuttle', <span class="tp-results">4.18 secs</span>]
['Vertical Jump', <span class="tp-results">34.5 inches</span>]

【问题讨论】:

    标签: python python-3.x web-scraping beautifulsoup


    【解决方案1】:

    只需使用列表推导即可。

    resultSet = soup.find_all("div", attrs = {"class": "tp-title"})
    stats = [
        (i.contents[0], i.contents[1].text) for i in resultSet
    
    ]
    

    或者,for 循环。

    stats = []
    for i in resultSet:
        stats.append(i.contents[0], i.contents[1].text)
    

    print(stats)
    [
        ('40 Yard Dash', '4.44 Secs'),
        ('3 Cone Drill', '6.97 secs'),
        ('Broad Jump', '118.0 inches'),
        ('20 Yard Shuttle', '4.18 secs'),
        ('Vertical Jump', '34.5 inches')
    ]
    

    【讨论】:

    • 谢谢!但是我如何得到结果? 6.97、4.44等如上图。
    • @DeeeeRoy 做同样的事情。
    • 怎么样?我尝试了以下但它返回一个空列表。 stats = [] for i in soup.find_all("div", attrs = {"class": "tp-title"}): stats.append(i.contents[1])
    • for 循环是否像 for line in file 一样通过 rs 逐行运行?
    • @Timo 是的,你有没有观察到意外行为?
    【解决方案2】:

    这是另一种做同样事情的方法。不过看起来有点尴尬。

    import requests
    from bs4 import BeautifulSoup
    
    URL = "http://www.nfl.com/player/deandrewwhite/2552657/combine"
    res = requests.get(URL)
    soup = BeautifulSoup(res.text,"lxml")
    items = {item.select_one(".tp-results").previous_sibling:item.select_one(".tp-results").text for item in soup.select(".tp-title")}
    print(items)
    

    输出:

    {'3 Cone Drill': '6.97 secs', '20 Yard Shuttle': '4.18 secs', '40 Yard Dash': '4.44 Secs', 'Vertical Jump': '34.5 inches', 'Broad Jump': '118.0 inches'}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-27
      • 2018-07-15
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多