Почему некоторые HTML-теги невидимы при очистке? - PullRequest
0 голосов
/ 23 октября 2019

Я пытаюсь очистить текст с здесь для ввода непосредственно в лист Excel, а не копировать и вставлять. Веб-сайт использует HTML, чтобы включить информацию об оригинальной гарнитуре. Это пример того, как одна строка текста кодируется на странице:

<div class="line">
    <span class="milestone_wrap"> </span>
    <a id="tln-2212" href="index.html#tln-2212" class="milestone tln invisible" title="TLN: 2212">2212</a>
    <span class="milestone_wrap">When </span>
    <span class="typeform" data-setting="ſ">s</span>
    <span class="milestone_wrap">uch ill dealing mu</span>
    <span class="ligature" data-precomposed="ſt">
        <span class="typeform" data-setting="ſ">s</span>
        <span class="milestone_wrap">t</span>
    </span>
    <span class="milestone_wrap"> be </span>
    <span class="typeform" data-setting="ſ">s</span>
    <span class="milestone_wrap">eene in thought. </span>
    <span class="sd exit">
        <span class="space" style="padding-right:1em;" xml:space="preserve"></span>
        <i>Exit</i>
        <span class="milestone_wrap">.</span>
    </span>
</div>

Я пытался использовать метод find_all

import requests
from bs4 import BeautifulSoup as bs
url = 'https://internetshakespeare.uvic.ca/doc/R3_F1/scene/3.6/index.html'
page = requests.get(url)
text = bs(page.text, 'html.parser')

divs = text.find_all('div', class_="line")
for div in divs:
    for item in div.contents: print(item)

Это то, что я получаю обратно:

When 
<span class="typeform" data-setting="ſ">s</span>
uch ill dealing mu
<span class="ligature" data-precomposed="ſt"><span class="typeform" data-setting="ſ">s</span>t</span>
 be 
<span class="typeform" data-setting="ſ">s</span>
eene in thought. 
<span class="sd exit"><span class="space" style="padding-right:1em;" xml:space="preserve"> </span><i>Exit</i>.</span>

Все с тегом <span class="milestone_wrap"> отображается без тега: поэтому, когда я использую .find_all для 'span', эти строки не появляются, и поэтому у меня остаются случайные буквы. Есть ли причина, по которой этот класс не появляется?

Ответы [ 2 ]

0 голосов
/ 24 октября 2019

Работайте на уровне класса строк, но разлагайте теги a так, чтобы получить возможность удалять номера строк (если вы действительно не хотите их использовать), и в этом случае я бы добавил пробел между ними и следующим текстом

import requests
from bs4 import BeautifulSoup as bs

r = requests.get('https://internetshakespeare.uvic.ca/doc/R3_F1/scene/3.6/index.html')
soup = bs(r.content, 'lxml')

for line in soup.select('.line'):
    line.select_one('a').decompose()
    print(line.text)
0 голосов
/ 23 октября 2019

При выполнении вашего кода с небольшой корректировкой (модуль запросы должен быть импортирован) вы должны получить содержимое сайта.

from bs4 import BeautifulSoup as bs
import requests

url = 'https://internetshakespeare.uvic.ca/doc/R3_F1/scene/3.6/index.html'
page = requests.get(url)
text = bs(page.text, 'html.parser')

divs = text.find_all('div', class_="line")
for div in divs:
    for item in div.contents: print(item)

Текст можно найти в тегах <span class="milestone_wrap">. Вы можете проверить это с помощью инспектора вашего браузера. Текст доставляется небольшими порциями по тегам, например, «Который в». Вы должны быть в состоянии извлечь текст.

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