Невозможно удалить теги html без появления ошибки - PullRequest
0 голосов
/ 15 марта 2020

Поэтому я пытаюсь запустить этот простой код, где я анализирую некоторую информацию с сайта и возвращаю только информацию между тегами.

Код ниже

from bs4 import BeautifulSoup
import requests as reg
import csv
import re


url = ('https://pythonprogramming.net/parsememcparseface/')
response = reg.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

data = soup.find('div', class_='body')
header = data.find_all('th')
print(header.text)

Я пытается вернуть:

Program Name Internet Points Kittens?

Однако, это возвращает сообщение об ошибке:

AttributeError: ResultSet object has no attribute 'text'. You're probably treating a list of items like a single item. Did you call find_all() when you meant to call find()? 


Теперь, когда я удаляю .text, я могу получить

[<th>Program Name</th>, <th>Internet Points</th>, <th>Kittens?</th>]

Но, очевидно, я хочу удалить теги.

Любая помощь, пожалуйста?

Спасибо ^ _ ^

Ответы [ 2 ]

0 голосов
/ 16 марта 2020

Как говорится в сообщении об ошибке, find_all возвращает список элементов, а не один элемент. Проблема не в том, что в списке есть другие вещи, а в том, что у вас есть список, а .text определен для работы не над списком, а над одним элементом. Работает ли это лучше (немного ближе к исходному коду):

headers = data.find_all('th')
for header in headers:
    print(header.text)
0 голосов
/ 15 марта 2020

Попробуйте:

from bs4 import BeautifulSoup
import requests as reg
import csv
import re


url = ('https://pythonprogramming.net/parsememcparseface/')
response = reg.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

table = soup.find('table')
header = table.find_next("tr")
print(header.text)

Вывод:

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