Python выполняем фриланс задания #1
Задание нашел на Upwork и оно гласило:
Hi! I need a scraper for a website www.amalgama-lab.com, where I will put a link of lyrics with translation. And after I will get the result in the namesong.csv file.
for example, I put link https://www.amalgama-lab.com/songs/t/tones_and_i/dance_monkey.html
and I will get result namesong.csv file which contains
"They say, "Oh my god, I see the way you shine
Люди говорят: "Боже мой, я вижу, как ты сияешь!
Take your hands, my dear, and place them both in mine
Возьми меня за руки, дорогая."
Т.е. нам нужно распарсить страничку (которую подставит заказчик, не понятно конечно как и куда он ее будет подставлять) и вытащить из странички строчки текста. Все полученные данные записать в файл csv, а название выдернуть из ссылки (а можно пойти хитрее и брать со страницы название песни). Звучит круто и легко.
Давайте глянем код:
import requests
from lxml import etree
import lxml.html
import csv
def parse(url):
api = requests.get(url)
tree = lxml.html.document_fromstring(api.text)
text_original = tree.xpath('//*[@id="click_area"]/div//*[@class="original"]/text()')
text_translate = tree.xpath('//*[@id="click_area"]/div//*[@class="translate"]/text()')
with open("text.csv", "w", newline='') as csv_file:
write = csv.writer(csv_file)
for i in range(len(text_original)):
# write.writerow(text_original[i])
# write.writerow(text_translate[i])
print(text_original[i])
def main():
parse("https://www.amalgama-lab.com/songs/t/tones_and_i/dance_monkey.html")
if __name__ == "__main__":
main()
Домашнее задание я Вам дал такое:
- сделать функцию, в которой будет выдергиваться название для файла из ссылки, которую будет подставлять заказчик.
Делается разными путями, давайте глянем на такой:
def get_name(url):
return url.split("/")[-1].split(".")[0]
Прям тупо в одну строчку можно записать.
Подставляем сие чудо в функцию parse:
name = get_name(url)
И далее подставляем имя в открытии файла:
with open("%s.csv" % name, "w", newline='') as csv_file:
Теперь у нас генерится имя файла. Нужно только сделать проверку на существование одинаковых файлов. Если файл с таким именем уже есть, то надо сделать другое название, это уже на Ваше усмотрение, как и функция для этого дела.