2016-06-10 2 views
0

Я хочу удалить несколько тегов из некоторого HTML:TypeError: ожидается строка или буфер с BeautifulSoup

<p class="mt-20" itemprop="description"> и </p>. Все остальное, например <br>, должно остаться.

Код:

from bs4 import BeautifulSoup 
import requests 
import re 
url = 'https://www.tokopedia.com/tokoonline22/sendok-ukur-elektrik-500g-maks-white?' 
page3 = requests.get(url) 
soup3 = BeautifulSoup(page3.text, "lxml") 

#No problem. 
#v = """<p class="mt-20" itemprop="description">*OMCB07BK*<br/><br/>Tas backpack ini didesign khusus untuk menaruh drone DJI Phantom 3 beserta dengan aksesoris-aksesorisnya seperti propeller, baterai dan remot kontrol. Setiap slot tas didesign untuk menaruh semua part dari drone DJI sehingga drone mudah dirakit saat ingin digunakan.<br/><br/>Features<br/><br/>Shoulder Bag<br/>Tas ini mirip seperti tas ransel hanya berbeda pada komparmen penyimpanan dimana setiap komparmen didesign untuk menaruh part-part dari DJI Phantom 3.<br/><br/>Easy to Access<br/>Anda dapat merekit dan menggunakan drone dengan sangat cepat dan mudah berkat designnya yang terbuka.<br/><br/>Designed for DJI Phantom 3<br/>Didesign khusus untuk menaruh drone DJI Phantom 3 selain drone juga dapat menaruh aksesoris-aksesoris nya.<br/><br/>Specifications<br/>Dimension 37 x 26 x 7 cm</p></p> 
#""" 

v = soup3.find("p", {"itemprop": "description"}) 
result = re.sub('<p class="mt-20" itemprop="description">', "", v) 
print(result) 

Ошибка выхода:

result = re.sub('<p class="mt-20" itemprop="description">', "", v) 
File "/usr/lib/python2.7/re.py", line 151, in sub 
return _compile(pattern, flags).sub(repl, string, count) 
TypeError: expected string or buffer 

ответ

2

re.sub нуждается в string переменной, ваша v переменная является bs4 element tag. Вы можете изменить элемент BS4 в строку:

newv = str(v) 
result = re.sub('<p class="mt-20" itemprop="description">', "", newv) 
+0

спасибо братан, .. Я сумел @ user3636636 – Khorud

1

С другой стороны, вы на самом деле не нужны регулярные выражения. Вы можете unwrap (это то, что я думаю, что вы пытаетесь достичь) элемента с самой BeautifulSoup:

for elm in soup3.find_all("p", {"itemprop": "description"}): 
    elm.unwrap() 
+0

благодаря также ваш ответ ,, .. – Khorud

Смежные вопросы