如何为我的网页抓取找到合适的元素?

时间:2020-03-17 15:24:14

标签: python web-scraping beautifulsoup

我正试图从Transfermarkt的前25名最有价值球员中获得尽可能多的信息。我已经设法获得了一些信息(在同事和stackoverflow的帮助下),现在我试图获得玩家排名,我觉得很难,因为它看起来有所不同(我认为),来自其他元素。我是一个初学者,因此任何源材料或代码直接帮助都将有所帮助。链接到我要抓取的网站:Transfermarkt

我尝试通过不同的途径接触元素,但似乎无法理解。我已经在crummy.com上阅读了有关bs4的信息,并在stackoverflow上查看了其他transfermarkt示例,但是我对编码的不好的了解却给我带来了麻烦。我正在用我的主代码之外的不同类型的元素进行测试,以查看是否获得正确的结果。

我的测试代码如下所示,但打印内容没有任何显示。

import requests
from bs4 import BeautifulSoup
import re

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0'
}
r = requests.get(
    "https://www.transfermarkt.co.uk/spieler-statistik/wertvollstespieler/marktwertetop", headers=headers)

soup = BeautifulSoup(r.text, 'html.parser')

for position in soup.find_all("td",class_="inline_table"):
    print(position)

2 个答案:

答案 0 :(得分:1)

从VarKas答案开始,但重新调整为您的原始尝试,如果您寻找'table'类为'inline-table'的{​​{1}},它将抓住玩家姓名和位置作为第1行的“迷你桌子”和2:

for table in soup.find_all('table', attrs={'class': 'inline-table'}):
    content = table.contents
    print(content[0].text)  # Name
    print(content[1].text)  # Position

此外,如果您希望查找的内容多于前25个,则可以通过向URL添加'?page='来浏览表的所有页面(共有20个页面):

import requests
from bs4 import BeautifulSoup

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0'
}

pages = range(1, 20)

for page in pages:

    r = requests.get(
        "https://www.transfermarkt.co.uk/spieler-statistik/wertvollstespieler/marktwertetop?page=%d" % page, headers=headers)

    soup = BeautifulSoup(r.text, 'html.parser')
    pretty = soup.prettify()

    for table in soup.find_all('table', attrs={'class': 'inline-table'}):
        content = table.contents
        print(content[0].text)  # Name
        print(content[1].text)  # Position

答案 1 :(得分:0)

使用此代码

saveDefaultConfig()