Удаление записей на основе даты с BeautifulSoup - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть XML файл, который выглядит следующим образом:

?xml version="1.0" encoding="UTF-8"?>
  <url>
    <lastmod>2020-02-04T16:21:00+01:00</lastmod>
    <loc>https://www.h.com</loc>
  </url>
  <url>
    <lastmod>2020-01-31T17:17:00+01:00</lastmod>
    <loc>https://www.h.com</loc>
  </url>
  <url>
    <lastmod>2020-01-27T13:53:00+01:00</lastmod>
    <loc>https://www.h.coml</loc>
  </url>

Datetime.date, который выглядит так:

datetime.date(2020, 02, 01)

Можно ли использовать BeautifulSoup для удаления / igonre содержимое тега <url>, если дата в теге <lastmod> старше заданного datetime.date?

С таким результатом:

?xml version="1.0" encoding="UTF-8"?>
  <url>
    <lastmod>2020-02-04T16:21:00+01:00</lastmod>
    <loc>https://www.h.com</loc>
  </url>

Может кто-нибудь помочь?

Ответы [ 2 ]

1 голос
/ 07 февраля 2020

Все ли в порядке?

import time
from simplified_scrapy.simplified_doc import SimplifiedDoc
html = '''
<?xml version="1.0" encoding="UTF-8"?>
<url>
  <lastmod>2020-02-04T16:21:00+01:00</lastmod>
  <loc>https://www.h.com</loc>
</url>
<url>
  <lastmod>2020-01-31T17:17:00+01:00</lastmod>
  <loc>https://www.h.com</loc>
</url>
<url>
  <lastmod>2020-01-27T13:53:00+01:00</lastmod>
  <loc>https://www.h.coml</loc>
</url>
'''
doc = SimplifiedDoc(html)
urls = doc.urls
startTime = time.strptime("2020-2-1", "%Y-%m-%d")
removeList=[]
for url in urls:
  lastmod = url.lastmod.html # Get lastmod
  tm = time.strptime(lastmod[0:lastmod.find('+')], "%Y-%m-%dT%H:%M:%S")
  if tm<startTime:
    removeList.append(url)
n = len(removeList)
html = doc.html
while n>0: # Delete data in reverse order
  n-=1
  url = removeList[n]
  html = html[0:url._start]+html[url._end:] # Delete url data
print (html.strip())

Результат:

<?xml version="1.0" encoding="UTF-8"?>
<url>
  <lastmod>2020-02-04T16:21:00+01:00</lastmod>
  <loc>https://www.h.com</loc>
</url>
0 голосов
/ 06 февраля 2020

Если вы используете python> = 3.7, вы можете преобразовать временную строку (для удобства, названную ниже как your_date_string) во время следующим образом:

datetime.strptime(your_date_string, '%Y-%m-%dT%H:%M:%S%z')

, если она старше python версия, вам нужно удалить последнее двоеточие из часового пояса

if your_date_string[-3] == ':': 
    your_date_string = your_date_string[:-3]+ your_date_string[-2:]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...