Разбор Python BeautifulSoup из конкретной таблицы - PullRequest
0 голосов
/ 24 февраля 2019

Вот часть скрипта, анализирующего HTML с использованием BeautifulSoup.Я пытаюсь получить ссылки со страницы, которые позже используются.Кажется, все работает нормально, однако я хотел бы получить только некоторые из этих ссылок, а не все из них. Я имею в виду, что меня интересуют только ссылки, размещенные в первой таблице на странице.Я понимаю, что могу просто сократить список вручную, но это не очень-то для меня.

Вот URL страницы: https://www.spotrac.com/nba/atlanta-hawks/cap/

Есть ли способ сделать это?

from bs4 import BeautifulSoup
from urllib.request import Request, urlopen
import re

req = Request("https://www.spotrac.com/nba/atlanta-hawks/cap/")
html_page = urlopen(req)

soup = BeautifulSoup(html_page, features="html.parser")
links = []


for link in soup.find_all('a'):
    links.append(link.get('href'))
players=[]
i=0
while i<len(links):
    if "redirect/player" in links[i]:
        players.append(links[i])
    i+=1
print(players)

Ответы [ 3 ]

0 голосов
/ 24 февраля 2019

Вы можете настроить этот код ниже.

import requests
from bs4 import BeautifulSoup

url = 'https://www.spotrac.com/nba/atlanta-hawks/cap/'

headers = {'Host': 'www.spotrac.com',
           'Referer': 'https://www.spotrac.com/nba/atlanta-hawks/cap/',
           'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}

pageTree = requests.get(url, headers=headers)
soup = BeautifulSoup(pageTree.content, 'lxml')

table = soup.find('tbody')
links = table.find_all('a')

for item in links:
    print(str(item.text), str(item['href']))

Результат:

Kent Bazemore https://www.spotrac.com/redirect/player/11079/
Miles Plumlee https://www.spotrac.com/redirect/player/10851/
Dewayne Dedmon https://www.spotrac.com/redirect/player/13536/
Trae Young https://www.spotrac.com/redirect/player/26971/
Alex Len https://www.spotrac.com/redirect/player/13318/
Taurean Prince https://www.spotrac.com/redirect/player/20217/
Justin Anderson https://www.spotrac.com/redirect/player/17849/
John Collins https://www.spotrac.com/redirect/player/23614/
Kevin Huerter https://www.spotrac.com/redirect/player/26985/
DeAndre' Bembry https://www.spotrac.com/redirect/player/20226/
Omari Spellman https://www.spotrac.com/redirect/player/26996/
Vince Carter https://www.spotrac.com/redirect/player/2590/
Tyler Dorsey https://www.spotrac.com/redirect/player/23642/
Jaylen Adams https://www.spotrac.com/redirect/player/27343/
Jordan Sibert https://www.spotrac.com/redirect/player/18240/

Если это то, что вам нужно, отметьте этот ответ как принятый.

0 голосов
/ 24 февраля 2019

Я хотел бы рассмотреть возможность использования селектора first-child css для ограничения первой таблицей;вы можете использовать descendant combinator, чтобы затем выбрать атрибуты href в таблице (ваши ссылки).

import requests
from bs4 import BeautifulSoup as bs
url = 'https://www.spotrac.com/nba/atlanta-hawks/cap/'
res = requests.get(url)
soup = bs(res.content, 'lxml')
links = [item['href'] for item in soup.select('table:first-child [href]')]
print(links)
0 голосов
/ 24 февраля 2019

Вы можете сузить круг, сначала используя find в таблице, содержащей первый набор имен:

...
table = soup.find('tbody')

for link in table.find_all('a'):
...

Если посмотреть на исходный код, то вы обнаружите, что нужные данные находятся в tbody.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...