Как я могу получить ссылки под конкретным классом - PullRequest
0 голосов
/ 05 мая 2018

Итак, 2 дня назад я пытался проанализировать данные между двумя одними и теми же классами, и Кейур мне очень помог, после того как он оставил позади другие проблемы ..: D

Ссылка на страницу

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

from bs4 import BeautifulSoup
import urllib.request
import datetime

headers = {}  # Headers gives information about you like your operation system, your browser etc.
headers['User-Agent'] = 'Mozilla/5.0'  # I defined a user agent because HLTV perceive my connection as bot.
hltv = urllib.request.Request('https://www.hltv.org/matches', headers=headers)  # Basically connecting to website
session = urllib.request.urlopen(hltv)
sauce = session.read()  # Getting the source of website
soup = BeautifulSoup(sauce, 'lxml')

a = 0
b = 1
# Getting the match pages' links.
for x in soup.find('span', text=datetime.date.today()).parent:
    print(x.find('a'))

Ошибка:

На самом деле нет никаких ошибок, но выводится как:

None

None
None
-1
None
None
-1

Затем я исследовал и увидел, что если нет данных для выдачи, функция поиска не дает вам ничего, что не является ничем. Тогда я попытался использовать find_all

Код:

print(x.find_all('a'))

Выход:

AttributeError: 'NavigableString' object has no attribute 'find_all'

Это имя класса:

<div class="standard-headline">2018-05-01</div>

Я не хочу размещать здесь весь код, так что вот ссылка hltv.org/matches/, чтобы вы могли легче проверять классы.

1 Ответ

0 голосов
/ 05 мая 2018

Я не совсем уверен, что могу понять, какие ссылки ОП действительно хочет получить. Однако я предположил. Ссылки находятся в составных классах a-reset block upcoming-match standard-box, и если вы можете определить правильный класс, то вам будет достаточно одного отдельного запроса для получения данных, подобных selectors do. Дайте ему шанс.

from bs4 import BeautifulSoup
from urllib.request import Request, urlopen
from urllib.parse import urljoin
import datetime

url = 'https://www.hltv.org/matches'

req = Request(url, headers={"User-Agent":"Mozilla/5.0"}) 
res = urlopen(req).read()
soup = BeautifulSoup(res, 'lxml')
for links in soup.find(class_="standard-headline",text=(datetime.date.today())).find_parent().find_all(class_="upcoming-match")[:-2]: 
    print(urljoin(url,links.get('href')))

Выход:

https://www.hltv.org/matches/2322508/yeah-vs-sharks-ggbet-ascenso
https://www.hltv.org/matches/2322633/team-australia-vs-team-uk-showmatch-csgo
https://www.hltv.org/matches/2322638/sydney-saints-vs-control-fe-lil-suzi-winner-esl-womens-sydney-open-finals
https://www.hltv.org/matches/2322426/faze-vs-astralis-iem-sydney-2018
https://www.hltv.org/matches/2322601/max-vs-fierce-tiger-starseries-i-league-season-5-asian-qualifier

и т. Д. ------

...