【问题标题】:Deleting entries based on date with BeautifulSoup使用 BeautifulSoup 根据日期删除条目
【发布时间】:2020-02-07 16:33:55
【问题描述】:

我有一个如下所示的 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)

如果&lt;lastmod&gt; 标记中的日期早于给定的datetime.date,是否可以使用BeautifulSoup 删除/删除&lt;url&gt; 标记的内容?

结果如下:

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

有人可以帮忙吗?

【问题讨论】:

标签: python beautifulsoup


【解决方案1】:

这样好吗?

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>

【讨论】:

    【解决方案2】:

    如果您使用的是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:]
    

    【讨论】:

      猜你喜欢
      • 2014-09-22
      • 2013-07-30
      • 1970-01-01
      • 1970-01-01
      • 2020-09-03
      • 2021-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多