Извлеките один div из HTML и сохраните на месте. TypeError: ожидается объект символьного буфера

Я пытаюсь написать простой скрипт Python, чтобы продолжить изучение BeautifulSoup/Python.

Функциональность, которую я хотел бы, проста, я хотел бы извлечь div из файла HTML и обновить файл HTML, чтобы он содержал только содержимое этого div. Например, если мой HTML, index.html, содержит:

<head> 
  <title> Parsing HTML </title> 
</head>
<body>
  <h1> Title </h1>

  <div class="content"> 
    <p> This is the content </p> 
    <img src="img.jpg" />
  </div>
</body>

После запуска моей программы я бы хотел, чтобы index.html содержал только

 <div class="content"> 
        <p> This is the content </p> 
        <img src="img.jpg" />
 </div>

Таким образом, <div class="content"> будет использоваться в качестве параметра для определения места извлечения в HTML.

Я думаю, вам нужно использовать BeautifulSoup, чтобы написать это, вот моя попытка (для кода выше). Я также пытался сделать его рекурсивным:

import os
from bs4 import BeautifulSoup

def CleanUpFolder(dir):
    directory = os.listdir(dir)
    files = []

    for file in directory:
        if file.endswith('.html'):
            files.insert(0, file)
        if os.path.isdir(file):
            CleanUpFolder(file)
        for fileName in files:
            file = open(dir + "\\" + fileName)
            content = file.read()
            file.close()
            soup = BeautifulSoup.BeautifulSoup(content)
            toWrite = soup.find("div", {"class": "main"})
            file = open(dir + "\\" + fileName, 'w')
            file.write(toWrite)
            file.close()


dir = "C:\Users\Folder\Desktop\\testFolder"
CleanUpFolder(dir)

Мои ошибки:

Трассировка (последний последний вызов): файл «C:/Users/Admin/PycharmProjects/Extract-Main-2.py», строка 25, в CleanUpFolder (dir)

Строка 25 — последняя строка, CleanUpfolder(dir)

Я не понимаю, чем это вызвано.

а также -

Файл «C:/Users/Admin/PycharmProjects/Extract-Main-2.py», строка 20, в файле CleanUpFolder.write(toWrite) TypeError: ожидается объект символьного буфера

Это я получил из примера кода в документации BeautifulSoup, поэтому не понимаю, почему он не работает.

Любая помощь / обратная связь очень ценится - особенно объяснения, поскольку я нахожу BeautifulSoup гораздо более сложным, чем я должен был бы разобраться!

Спасибо :)


person Simon Kiely    schedule 10.12.2014    source источник


Ответы (1)


Вы должны либо

import bs4
    ...
soup = bs4.BeautifulSoup(content)

or

from bs4 import BeautifulSoup
    ...
soup = BeatifulSoup(content)

Проблема вызвана попыткой запустить код, написанный из BeautifulSoup 3, импортированный как BeautifulSoup, в BeautifulSoup 4. Оба модуля содержат функцию с именем BeautifulSoup(), и именно эту функцию должен вызывать ваш код.

person holdenweb    schedule 10.12.2014
comment
Большое спасибо за это, глупая оплошность с моей стороны, теперь исправлено :) - person Simon Kiely; 10.12.2014