Как в данном коде сделать три функции, что бы они все работали?
Мне нужно что бы две функции my_parse_eng и my_parse_rus делали парсинг сайта, с этим все понятно проблем нет. Дальше не могу понять как получившие данные отправить в функцию my_open():, которая записывает все в файл text.csv
В функции main, у меня два раза идет обращение к одной и той же ссылке, как сделать нормально, что бы не было дубляжа?
import requests
from lxml import etree
import lxml.html
import csv
def my_open():
with open("text.csv", "w", newline='') as csv_file:
write = csv.writer(csv_file)
for i in range(len(my_parse_eng())):
write.writerow(my_parse_eng([i]))
write.writerow(my_parse_rus([i]))
def my_parse_eng(url):
api = requests.get(url)
tree = lxml.html.document_fromstring(api.text)
text_original = tree.xpath('//*[@id="click_area"]//*[@class="original"]/text()')
return(text_original)
def my_parse_rus(url):
api = requests.get(url)
tree = lxml.html.document_fromstring(api.text)
text_translate = tree.xpath('//*[@id="click_area"]//*[@class="translate"]/text()')
return(text_translate)
def main():
my_parse_eng("https://www.amalgama-lab.com/songs/t/tones_and_i/dance_monkey.html")
my_parse_rus("https://www.amalgama-lab.com/songs/t/tones_and_i/dance_monkey.html")
my_open()
if __name__ == "__main__":
main()
Ответы (1 шт):
Автор решения: insolor
→ Ссылка
В main получаете данные из функций, сохраняете в переменные, потом через аргументы передаете в my_open:
def my_open(eng, rus):
with open("text.csv", "w", newline='') as csv_file:
write = csv.writer(csv_file)
for e, r in zip(eng, rus):
write.writerow([e])
write.writerow([r])
# Вообще, логично было бы писать оригинал и перевод в одну строку в разные колонки:
# write.writerow([e, r])
... # Функции my_parse_eng, my_parse_rus без изменений
def main():
url = "https://www.amalgama-lab.com/songs/t/tones_and_i/dance_monkey.html"
eng = my_parse_eng(url)
rus = my_parse_rus(url)
my_open(eng, rus)