Удалите теги img из xml с помощью BeautifulSoup - PullRequest
0 голосов
/ 11 декабря 2018

Я впервые использую Python и BeautifulSoup.Дело в том, что я делаю миграцию всех статей в блоге с одного сайта на другой, и для этого я извлекаю определенную информацию из XML-файла;последняя часть моего кода говорит извлекать только текст между позициями 0 и 164 из мета-тега, чтобы он мог отображаться в поисковой выдаче Google так, как они хотят.

Проблема в том, что некоторые статьиВ блоге есть теги img в первых строках тега, и я хочу удалить их, включая атрибуты src, чтобы код мог захватывать только текст после этих тегов img.

Я пытался решить эту проблему во многихпути, но мне не удалось.

Вот мой код:

from bs4 import BeautifulSoup
from urllib2 import urlopen
import csv
import sys
import re

reload(sys)
sys.setdefaultencoding('utf8')

base_url = ("http://pimacleanpro.com/blog?rss=true")
soup = BeautifulSoup(urlopen(base_url).read(),"xml")

titles = soup("title")
slugs = soup("link")
bodies = soup("description")

with open("blog-data.csv", "w") as f:
    fieldnames = ("title", "content", "slug", "seo_title", "seo_description","site_id", "page_path", "category")
    output = csv.writer(f, delimiter=",")
    output.writerow(fieldnames)

    for i in xrange(len(titles)):
        output.writerow([titles[i].encode_contents(),bodies[i].encode_contents(formatter=None),slugs[i].get_text(),titles[i].encode_contents(),bodies[i].encode_contents(formatter=None)[4:164]])

print "Done writing file"

любая помощь будет оценена.

1 Ответ

0 голосов
/ 11 декабря 2018

Вот пример Python 2.7, который, я думаю, делает то, что вы хотите:

from bs4 import BeautifulSoup
from urllib2 import urlopen
from xml.sax.saxutils import unescape

base_url = ("http://pimacleanpro.com/blog?rss=true")

# Unescape to allow BS to parse the <img> tags
soup = BeautifulSoup(unescape(urlopen(base_url).read()))

titles = soup("title")
slugs = soup("link")
bodies = soup("description")

print bodies[2].encode_contents(formatter=None)[4:164]

# Remove all 'img' tags in all the 'description' tags in bodies
for body in bodies:
  for img in body("img"):
    img.decompose()

print bodies[2].encode_contents(formatter=None)[4:164]

# Proceed to writing to CSV, etc.

Первый оператор print выдает следующее:

<img src='"http://ekblog.s3.amazonaws.com/contentp/wp-content/uploads/2018/09/03082910/decoration-design-detail-691710-300x221.jpg"'><br>
<em>Whether you are up

В то время как второй после удаления <img> тегов выглядит следующим образом:

<em>Whether you are upgrading just one room or giving your home a complete renovation, it’s likely that your first thought is to choose carpet for all of

Конечно, вы можете просто удалить все теги изображений в объекте супа перед созданием titles, slugs или bodies, если они не представляют интереса.Вам:

for tag in soup("img"):
    tag.decompose()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...