Как мне найти подходящий элемент для моего просмотра веб-страниц? - PullRequest
0 голосов
/ 17 марта 2020

Я пытаюсь получить как можно больше информации от 25 лучших игроков на Transfermarkt. Мне удалось получить некоторую информацию (с помощью коллег и stackoverflow), и теперь я пытаюсь получить позицию игроков , что я нахожу довольно трудным, поскольку она выглядит иначе (на мой взгляд) из других элементов. Я новичок в этом, поэтому любой исходный материал или прямая помощь с кодом полезны. Ссылка на веб-сайт, на котором я работаю: Transfermarkt

Я пытался найти элементы по разным путям, но, похоже, не могу их получить. Я читал о bs4 на crummy.com и смотрел другие примеры Transfermarkt здесь на stackoverflow, но мои плохие знания о кодировании доставляют мне проблемы. Я тестирую с различными типами элементов вне моего основного кода, чтобы увидеть, получаю ли я правильный результат.

Мой тестовый код выглядит так, и печать ничего не дает.

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 ]

1 голос
/ 17 марта 2020

Работая из ответа VarKas, но выровнявшись по своей первоначальной попытке, если вы ищете 'table' с классом 'inline-table', он берет «мини-столы» с именем и позицией игрока в строке 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 лучших, вы можете пролистать все страницы таблицы (их 20), добавив '?page=' к URL:

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
0 голосов
/ 17 марта 2020

используйте этот код

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')
table = soup.find_all("table", {"class": "inline-table"})
# table[0] ---> Mbape Data
# table[1] --->Raheem Sterling Data
# table[2] ---> Neymar Data
print(table[0].find_all('a')[1].get_text())  # Mbape Name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...