Python 3 BeautifulSoup Strip Определенные значения из класса Span? - PullRequest
0 голосов
/ 01 июля 2018

Я проверил несколько разных ответов, которые нашел здесь, но, похоже, не могу решить мою проблему. Надеюсь, что кто-то может помочь.

Я использую BeautifulSoup 4 в среде Python 3. На сайте, который я очищаю, я пытаюсь получить конкретные значения текста в одном классе span. Класс span говорит:

<span class="TeamChip__teamName--1renR">MIL</span> <span class="TeamChip__teamName--1renR">CIN</span>

(названия команд, которые я пытаюсь получить).

Когда я использую функцию find, она объединяет оба имени в одну строку в выводе csv, но я хотел бы получить решение, в котором оно разделяет их с помощью какого-либо разделителя или в их ячейки (в зависимости от того, что именно). Прямо сейчас это выглядит как MLCIN, и я бы хотел, чтобы это было что-то вроде MIL, CIN.

Это мой код на Python, с несколькими комментариями, которые я попробовал:

from bs4 import BeautifulSoup
import csv

with open('BoxScoreURLS.csv', newline='') as f_urls, open('output.csv', 'w', `newline='') as f_output:`
csv_urls = csv.reader(f_urls)
csv_output = csv.writer(f_output)
csv_output.writerow(['Teams', 'Box Score'])

for line in csv_urls:
    r = requests.get(line[0]).text
    soup = BeautifulSoup(r, 'lxml')
    teams = soup.find("span", {"class":"TeamChip__teamName--1renR"})
    print('Teams :', teams.text)
    #person = {}

    #for span in soup.findAll('span', {'class': '.TeamChip__teamName--1renR'}):
    #   person[span.find('p').attrs['class'][0]] = span.text.strip()

    #print(person)

    print([item.get_text(strip=True) for item in soup.findAll("span.TeamChip__teamName--1renR")])
    #teams = soup.find("div", {"class":"TeamChip__teamName"}).
    #print('Teams :', teams.text)


    csv_output.writerow([teams.text])

Вывод записывает в csv нормально, но записывает оба значения в одну строку (MILCIN), но я бы хотел, чтобы это было (MIL, CIN), чтобы можно было легче очистить данные в дальнейшем. Этот метод будет применяться и к оценкам, поэтому я не могу просто принять формулу Excel для разделения данных.

Большое спасибо! Дайте мне знать, если я смогу ответить на дополнительные вопросы.

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Да, это сработало. Пришлось снова добавить импорт CSV вверху, и я изменю переменную страницы так, чтобы она была из моего CSV, у которого есть список URL-адресов, но вывод работает. Он помещает названия обеих команд в свои ряды. Большое спасибо!

0 голосов
/ 02 июля 2018

Я использовал запросы в этом примере. Я протестировал код здесь, и он работает. Единственное, что я не проверял, это вывод в файл CSV. Так что, если это все еще не работает, я предполагаю, что это будет способ, которым это выведено.

from bs4 import BeautifulSoup
import requests

page = requests.get("http://your-site.com")
soup = BeautifulSoup(page.content, 'html.parser')
results = soup.findAll('span', {'class' :'TeamChip__teamName--1renR'})
for r in range(len(results)):
    csv_output.writerow([results[r].text])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...