У вас есть несколько ошибок. Я начну вверху и начну свой путь.
dir = os.getcwd()
Это мертвый код, так как вы никогда не ссылаетесь на dir
. Любой linter должен предупредить вас об этом. Удалите его.
currTime = time.time() # nit: camelCase is not idiomatic in Python, use curr_time or currtime
day = (30 * 86400) # nit: this should be named thirty_days, not day. Also 86400 seems like a magic number
# maybe day = 60 * 60 * 24; thirty_days = 30 * day
executionDate = currTime - day # nit: camelCase again...
Обратите внимание, что executionDate
теперь всегда за 30 дней до времени.
if currTime > executionDate:
Что? Почему мы это проверяем? Мы уже знаем, что executionDate
за 30 дней до этого прямо сейчас!
os.remove(filePath)
Вы пытаетесь удалить каталог? Huh?
Что вы пытаетесь делать, я думаю, это проверить каждый файл в каталоге, сравнить его временную метку создания (или последняя измененная временная метка? Я не уверен) до значения тридцать дней назад и удаляю этот файл, если это возможно. Вы хотите os.stat
и os.listdir
for fname in os.listdir(filePath):
ctime = os.stat(os.path.join(filePath, fname)).st_ctime
if ctime < cutoff: # I've renamed executionDate here because it's a silly name
try:
os.remove(os.path.join(filePath, fname))
except Exception as e:
# something went wrong, let's print what it was
print("!! Error: " + str(e))
else:
# nothing went wrong
print("Deleted " + os.path.join(filePath, fname))
Я, наконец, сделал следующее, что имеет преимущество в том, что он не разрушительный. Кроме того, у меня нет времени на его тестирование, но я просто надеялся, что это позволит избежать прохождения каждого вложенного элемента, как в ответе @ Bitto-Bennichan, но на самом деле это неуверенно. В любом случае, он делает то, что хотел:
all_fetched = []
fetched = soup.find('div', class_='wanted')
while fetched is not None:
all_fetched.append(fetched)
try:
last = list(fetched.descendants)[-1]
except IndexError:
break
fetched = last.findNext('div', class_='wanted')
Вы можете передать функцию в качестве аргумента find_all
, в дополнение к другим аргументам. А внутри вы можете проверить с помощью find_parents (), чтобы убедиться, что у него нет div верхнего уровня с тем же классом. Используйте find_parents()
, так как он будет проверять всех родителей, а не только их непосредственных родителей, так что вы получите только самый внешний «требуемый» div.
def top_most_wanted(tag):
children_same_class=tag.find_parents("div", class_="wanted")
if len(children_same_class) >0:
return False
return True
soup=BeautifulSoup(text,'html.parser')
print(soup.find_all(top_most_wanted,'div',class_="wanted"))