Python scrape选项卡

2024-06-01 08:12:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我对编程还不熟悉,所以很有可能我的想法是做我想做的事情完全不是这样做的。在

我正在尝试从这个站点中获取排名表-http://www.flashscore.com/hockey/finland/liiga/-现在,如果我甚至可以用团队名称刮出一个列,那就没问题了,所以我试图找到类为“participant_name col_participant_name col_name”的td标记,但代码返回空括号:

import requests
from bs4 import BeautifulSoup
import lxml

def table(url):
    teams = []
    source = requests.get(url).content
    soup = BeautifulSoup(source, "lxml")
    for td in soup.find_all("td"):
        team = td.find_all("participant_name col_participant_name col_name")
        teams.append(team)
        print(teams)

table("http://www.flashscore.com/hockey/finland/liiga/")

我尝试使用tr标记检索整行,但也没有成功。在


Tags: name标记importcomhttpwwwcolrequests
3条回答

我认为这里的主要问题是您试图使用requests来获取动态生成的内容,注意页面的HTML源代码中根本没有participant_name col_participant_name col_name文本,这意味着这是由网站用JavaScript生成的。对于该工作,您应该使用类似^{}^{}或您认为更好的驱动程序,下面是使用上述两种工具的示例:

from bs4 import BeautifulSoup
from selenium import webdriver

url = "http://www.flashscore.com/hockey/finland/liiga/"

driver = webdriver.Chrome()
driver.get(url)

source = driver.page_source

soup = BeautifulSoup(source, "lxml")
elements = soup.findAll('td', {'class':"participant_name col_participant_name col_name"})

我认为代码的另一个问题是您试图访问标记的方式,如果您想匹配特定的class或任何其他特定属性,那么可以使用Python的字典作为.findAll函数的参数。在

我们现在可以使用cd7来找到 ^{pr2}$

teams现在应该是所需的输出:

>>> teams
['Assat', 'Hameenlinna', 'IFK Helsinki', 'Ilves', 'Jyvaskyla', 'KalPa', 'Lukko', 'Pelicans', 'SaiPa', 'Tappara', 'TPS Turku', 'Karpat', 'KooKoo', 'Vaasan Sport', 'Jukurit']

teams也可以使用列表理解创建:

teams = [item.a.text for item in elements]

你很亲密。在

开始的时候不要那么雄心勃勃,只关注“参与者姓名”。看看https://www.crummy.com/software/BeautifulSoup/bs4/doc/#find-all。我想你想要的是:

for td in soup.find_all("td", "participant_name"):

另外,你看到的网页内容肯定和我不一样。在URL的wget之后,grep在文本中根本找不到“参与者姓名”。您需要验证您的代码是否正在查找HTML文本中实际存在的ID或类。在

阿吉亚先生比我先到了!我要指出的是,你可以单独使用硒。当然,他指出,这是众多动态加载大部分内容的网站之一。在

您可能有兴趣观察到我使用了xpath表达式。这些通常是表达你想要什么的简洁方式。一旦你习惯了,就不难读懂了。在

>>> from selenium import webdriver
>>> driver = webdriver.Chrome()
>>> driver.get('http://www.flashscore.com/hockey/finland/liiga/')
>>> items = driver.find_elements_by_xpath('.//span[@class="team_name_span"]/a[text()]')
>>> for item in items:
...     item.text
... 
'Assat'
'Hameenlinna'
'IFK Helsinki'
'Ilves'
'Jyvaskyla'
'KalPa'
'Lukko'
'Pelicans'
'SaiPa'
'Tappara'
'TPS Turku'
'Karpat'
'KooKoo'
'Vaasan Sport'
'Jukurit'

相关问题 更多 >