Как скрести только определенные теги, которые находятся в одном классе? - PullRequest
1 голос
/ 23 мая 2019

Я создаю эту программу, которая позволяет мне очищать все имена и способности персонажей с этого сайта.Теги (li), которые содержат нужную мне информацию, смешиваются с другими ненужными тегами li.

Я пробовал выбирать разные классы, но они не работают.

Вот мой код:

import bs4, requests, lxml, re, time, os
from bs4 import BeautifulSoup as soup

def webscrape():
    res = requests.get('https://www.usgamer.net/articles/15-11-2017-skyrim-guide-for-xbox-one-and-ps4-which-races-and-character-builds-are-the-best')
    soup = bs4.BeautifulSoup(res.text, 'lxml')
    races_list = soup.find_all("li < strong")
    races_list_text = [f.text.strip() for f in races_list]
    print(races_list_text)
    time.sleep(1)
webscrape()

Ожидается, что он распечатает все расы и соответствующую им информацию.

1 Ответ

0 голосов
/ 23 мая 2019

Вы можете использовать следующие

import requests
from bs4 import BeautifulSoup as bs

r = requests.get('https://www.usgamer.net/articles/15-11-2017-skyrim-guide-for-xbox-one-and-ps4-which-races-and-character-builds-are-the-best')
soup = bs(r.content, 'lxml')

#one  list of tuples
race_info = [ (item.text, item.next_sibling) for item in soup.select('h2 ~ ul strong')]
# separate lists
races, abilities = zip(*[ (item.text, item.next_sibling) for item in soup.select('h2 ~ ul strong')])

Словарь может быть лучше, в этом случае вы можете сделать

race_info = [ (item.text, item.next_sibling) for item in soup.select('h2 ~ ul strong')]
race_info = dict(race_info)

~ - это общий комбинатор сестер :

Комбинатор ~ выбирает братьев и сестер. Это означает, что второй элемент следует за первым (хотя и не обязательно сразу), и оба тот же родитель.

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