当前位置: 首页 > 知识库问答 >
问题:

ESPN. com Python网页抓取问题

燕禄
2023-03-14

我试图为所有大学足球队的名单收集数据,因为我想根据他们的名单组成对球队表现进行一些分析。

我的脚本在第一页上工作,它迭代每个团队,并可以打开每个团队的名册链接,但是然后我在名册页面上为一个团队运行的美丽汤命令继续抛出索引错误。当我查看超文本标记语言时,似乎我正在编写的命令应该工作,但当我从美丽的汤中打印页面源时,我在Chrome的开发人员工具中看不到什么。这是JS被用来提供内容的一些实例吗?如果是这样,我以为Selenium能绕过这个?

我的代码。。。

import requests
import csv
from bs4 import BeautifulSoup
from selenium import webdriver

teams_driver = webdriver.Firefox()
teams_driver.get("http://www.espn.com/college-football/teams")
teams_html = teams_driver.page_source
teams_soup = BeautifulSoup(teams_html, "html5lib")

i = 0

for link_html in teams_soup.find_all('a'):
    if link_html.text == 'Roster':
        roster_link = 'https://www.espn.com' + link_html['href']

        roster_driver = webdriver.Firefox()
        roster_driver.get(roster_link)
        roster_html = teams_driver.page_source
        roster_soup = BeautifulSoup(roster_html, "html5lib")

        team_name_html = roster_soup.find_all('a', class_='sub-brand-title')[0]
        team_name = team_name_html.find_all('b')[0].text

        for player_html in roster_soup.find_all('tr', class_='oddrow'):
            player_name = player_html.find_all('a')[0].text
            player_pos = player_html.find_all('td')[2].text
            player_height = player_html.find_all('td')[3].text
            player_weight = player_html.find_all('td')[4].text
            player_year = player_html.find_all('td')[5].text
            player_hometown = player_html.find_all('td')[6].text

            print(team_name)
            print('\t', player_name)

        roster_driver.close()

teams_driver.close()

共有1个答案

邢新
2023-03-14

在for循环中,您使用的是第1页的html(floster\u html=teams\u driver.page\u source),因此当您尝试选择team\u name\u html的第1项时,会出现索引错误,因为find\u all返回一个空列表。

此外,您不需要打开所有的Firefox实例,您可以在拥有html时关闭驱动程序。

teams_driver = webdriver.Firefox()
teams_driver.get("http://www.espn.com/college-football/teams")
teams_html = teams_driver.page_source
teams_driver.quit()

但是您不必为此任务使用selenium,您可以通过请求和bs4获取所有数据。

import requests
from bs4 import BeautifulSoup

r = requests.get("http://www.espn.com/college-football/teams")
teams_soup = BeautifulSoup(r.text, "html5lib")

for link_html in teams_soup.find_all('a'):
    if link_html.text == 'Roster':
        roster_link = 'https://www.espn.com' + link_html['href']
        r = requests.get(roster_link)
        roster_soup = BeautifulSoup(r.text, "html5lib")

        team_name = roster_soup.find('a', class_='sub-brand-title').find('b').text
        for player_html in roster_soup.find_all('tr', class_='oddrow'):
            player_name = player_html.find_all('a')[0].text
            player_pos = player_html.find_all('td')[2].text
            player_height = player_html.find_all('td')[3].text
            player_weight = player_html.find_all('td')[4].text
            player_year = player_html.find_all('td')[5].text
            player_hometown = player_html.find_all('td')[6].text
            print(team_name, player_name, player_pos, player_height, player_weight, player_year, player_hometown)

 类似资料:
  • 我是python新手,正在尝试从以下站点获取数据。虽然这段代码适用于不同的站点,但我无法让它适用于nextgen stats。有人想知道为什么吗?下面是我的代码和我得到的错误 下面是我得到的错误 df11=pd。读取html(urlwk1)回溯(上次调用):文件“”,第1行,在文件“C:\Users\USERX\AppData\Local\Packages\PythonSoftwareFounda

  • 在我的硕士论文中,我正在探索通过web自动化从网站中提取数据的可能性。步骤如下: 登录网站(https://www.metal.com/Copper/201102250376) 输入用户名和密码 单击登录 将日期更改为2020年1月1日 刮取生成的表格数据,然后将其保存到csv文件中 用我电脑上的特定名称保存到特定文件夹 运行相同的序列,在同一浏览器窗口的新选项卡中下载其他材料的其他历史价格数据

  • 主要内容:导入所需模块,拼接URL地址,向URL发送请求,保存为本地文件,函数式编程修改程序本节讲解第一个 Python 爬虫实战案例:抓取您想要的网页,并将其保存至本地计算机。 首先我们对要编写的爬虫程序进行简单地分析,该程序可分为以下三个部分: 拼接 url 地址 发送请求 将照片保存至本地 明确逻辑后,我们就可以正式编写爬虫程序了。 导入所需模块 本节内容使用 urllib 库来编写爬虫,下面导入程序所用模块: 拼接URL地址 定义 URL 变量,拼接 url 地址。代码如下所示:

  • 问题内容: 我正在尝试开发一个简单的网页抓取工具。我想提取没有代码的文本。我实现了这个目标,但是我发现在某些加载了的页面中,我没有获得良好的结果。 例如,如果一些代码添加了一些文本,则看不到它,因为当我调用 我得到的原始文本没有添加文本(因为在客户端执行了)。 因此,我正在寻找一些解决此问题的想法。 问题答案: 一旦安装了,请确保二进制文件在当前路径中可用: 例 举个例子,我用以下HTML代码创建

  • 问题内容: 我想从网站上获取每天的日出/日落时间。是否可以使用Python抓取网络内容?使用什么模块?有没有可用的教程? 问题答案: 结合使用urllib2和出色的BeautifulSoup库:

  • 问题内容: 我正在使用Python从网站上抓取内容。首先,我用和Python的,但我看到,该网站有一个按钮,通过JavaScript创建的内容,所以我决定使用。 假设我可以使用Selenium等方法找到元素并获取其内容,那么当我可以对所有内容都使用Selenium时,有什么理由要使用? 在这种特殊情况下,我需要使用Selenium来单击JavaScript按钮,以便更好地使用Selenium进行解