#python #web-scraping #import
#python #очистка веб-страниц #импорт
Вопрос:
Привет, я пытаюсь реализовать аналогичную рекомендацию документа и функцию поиска, очищая новостные статьи. Ниже приведен файл py, который загружает новостные статьи и сохраняет информацию в массиве.
from daumnews import get_news_daum, get_news_contents_seoulgyeongje
from sklearn.feature_extraction.text import TfidfVectorizer
import os
links, titles = get_news_daum()
#При выполнении функции get_news_daum() ссылки и заголовки сохраняются в виде списка в переменных links и titles.
contents = []
similarities = []
os.chdir("C:/Users/hanbonghun/Desktop/newsscrapping/news")
for i in range(len(links)):
with open(f'{i 1}.txt',"w",encoding="utf-8") as f:
contents.append(get_news_contents_seoulgyeongje(f,links[i]))
#При выполнении функции get_news_contents_seoulgyeongje() заголовки и содержимое очищенных документов сохраняются в определенном
папка и каждое содержимое сохраняются в виде списка в содержимом
переменная.
vect = TfidfVectorizer(min_df=1, stop_words="english")
tfidf = vect.fit_transform(contents)
pairwise_similarity = tfidf * tfidf.T
similarities = pairwise_similarity.toarray()
print("succeeded in reading news articles.n")
#Часть, которая анализирует сходство элементов содержимого
В результате, когда вы запускаете get_news.py ссылки и заголовки хранятся в заголовках ссылок, а содержимое и сходства хранятся в статьях и сходстве каждой статьи. Проблема в том, что я хочу загружать и использовать эти переменные только из других файлов py, но при импорте переменных через import все содержимое get_news.py выполняются один раз, что занимает много времени. Есть ли способ получить только переменные, полученные путем выполнения get_news.py из другого файла?
Комментарии:
1. если вы не будете запускать код, то переменная может быть пустой, потому что код не может сохранить эти значения в переменных — код должен сохранить его в файле, и вам придется прочитать его из этого файла. Если вы не хотите запускать код в файле, поместите его в function — ie.
main()
и используйтеif __name__ == "__main__": main()
для запуска его только при непосредственном запуске скрипта, а не при импорте.
Ответ №1:
Если вы не хотите запускать код при импорте файла, поместите код в function — ie. main()
— и добавить
if __name__ == '__main__':
main()
и он будет запускать код в main()
только при непосредственном запуске этого скрипта python get_news.py
links = None
titles = None
contents = []
similarities = []
def main():
global links
global titles
links, titles = get_news_daum()
os.chdir("C:/Users/hanbonghun/Desktop/newsscrapping/news")
for i in range(len(links)):
with open(f'{i 1}.txt',"w",encoding="utf-8") as f:
contents.append(get_news_contents_seoulgyeongje(f,links[i]))
# ... code ...
if __name__ == '__main__':
main()
Но если вы не будете запускать код, тогда переменные будут пустыми.
Если вы сохранили значения из переменных в файлах, то вам следует создать функцию, которая считывает значения из файла и напрямую возвращает значения, а затем вы должны импортировать эту функцию (не переменные) и использовать ее
from get_news import read_data_from_file
links, titles, contents, similarities = read_data_from_file()
Комментарии:
1. Теперь я проверил ответ. Извините за опоздание. Ответ был очень полезен для меня. Большое вам спасибо!