Получение данных с двух сайтов и обработка данных

asmadeus

Новичок
Пользователь
Июл 27, 2020
17
1
3
Здравствуйте!
Возможно, получу бан, а возможно, и помощь. А может, кто вообще захочет рассмотреть всю проблему за символическое вознаграждение.

Итак, вкратце. Я коллекционирую монеты и для своего каталога мне надо получать данные по ним с двух сайтов. Но - один на русском языке, другой на английском ( то есть нужен перевод русского запроса)
Запросы в файле, выглядят так:
Код:
"Болгария","10 стотинок","1992","","Болгарский лев","","","40.00","KM# 199","","
"Болгария","20 стотинок","1992","","Болгарский лев","","","56.00","KM# 200","",""
"Украина","1 гривна","2020","","Украинская гривна","","","3.00","UC# 5","",""
"Румыния","10 бань","2008","","Румынский лей","","","","KM# 191","","Монеты мира. Европа"
"Румыния","50 бань","2008","","Румынский лей","","","","KM# 192","",""

Читаю файл и получаю список запросов:
Код:
# Импорт модулей
import requests
from bs4 import BeautifulSoup
import re
from google_trans_new import google_translator
from pathlib import Path
# Импорт моих файлов
import dict as d

# Переменные
HEADERS = {
    'accept': '*/*',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0',
    'Upgrade-Insecure-Requests': '1'
}
ls = ('Страна', 'Номер по каталогу', 'Период', 'Номинал', 'Валюта', 'Год',
    'Дата на монете', 'Годы выпуска', 'Изъяты из обращения', 'Диаметр', 'Вес', 'Толщина',
    'Материал', 'Гурт', 'Форма монеты', 'Расположение аверса к реверсу', 'Дизайнер реверса',
    'Дизайнер аверса', 'Тип выпуска', 'Повод выпуска', 'Монетный двор', 'Тираж', 'Текст реверса'
    'Текст аверса', 'Текст гурта')
def open_import_txt():
    a=[]
    sch=[]
    f = Path('D://Documents//Coins//UCoin Cat//Import.txt')
    if f.is_file():
        with open('D://Documents//Coins//UCoin Cat//Import.txt', "r", encoding='utf-8') as f:
            for line in f:
                if not line.isspace():
                    a.append(line.replace('\n', ''))
        f.close()
        for i in range(len(a)):
            a2 = a[i].split(',')
            if re.search(r'(KM|Y).*', a2[8]):
                a3 = a2[0] + a2[1] +re.sub(r'(\d{4}\s).*', r'\1', a2[2]) + a2[8]
                a4 = a2[0] + a2[1] +re.sub(r'(\d{4}\s).*', r'\1', a2[2]) + a2[8]
            else:
                a3 = ''
                a4 = ''
            a3 = a3.replace ('""', ' ')
            a3 = a3.replace ('"', '')
            a4 = a4.replace ('""', ' ')
            a4 = a4.replace ('"', '')
            sch.append ([a3 , a4])
        sch = list(filter(None, sch))
        return sch
    else:
        print ('Файла для импорта нет по указанному пути')
        return 0

Работаю с полученным списком и получаю список страниц с данными по запросам. Точнее, должен получать, если бы переводчик работал (хотя до вчерашнего дня работал, да, переводил не все валюты, но сейчас вообще спотыкается чуть ли не на каждой):
Код:
def get_link(domain):
    links=[]
    sch = open_import_txt()
    if sch != 0:
        host = 'https://' + domain
        session = requests.Session()
        for i in range(len(sch)):
            if domain == 'ru.ucoin.net':
                url = (host + '/catalog/?')
                search = sch[i]
                yahr = re.search (r'\d{4}', search[0])
                r = session.get(url, headers=HEADERS, params=[('q', search[0])])
                if r.status_code == 200:
                    sp = BeautifulSoup(r.text, 'html.parser')
                    try:
                        link = sp.find('table', {'class': 'coin'}).find('a').get('href')
                        request = session.get(host + link, headers=HEADERS)
                        sp2 = BeautifulSoup(request.content, 'html.parser')
                        table = sp2.find_all('tr', {"class": "tr-hr"})
                        if table:
                            link = ''
                            for s in table:
                                if yahr.group(0) in s['data-href']:
                                    link = host + s['data-href']
                        else:
                            link = host + link
                    except AttributeError:
                        link = "Нет результата поиска, надо делать вручную"
                else:
                    print('Ошибка получения ссылки!')
                links.append(link)
            else:
                url = (host + '/catalogue/index.php?')
                translator = google_translator()
                search = sch[i]
                search = translator.translate(search[1], lang_src='ru', lang_tgt='en')
                r = session.get(url, headers=HEADERS, params=[('r', search)])
                if r.status_code == 200:
                    link = ''
                    sp = BeautifulSoup(r.text, 'html.parser')
                    try:
                        link = sp.find('div', {'class': 'description_piece'}).find('a').get('href')
                        link = host + link
                    except AttributeError:
                        link = "Нет результата поиска, надо делать вручную"
                else:
                    print('Ошибка получения ссылки!')
                links.append(link)
        return links

Пока так. Далее утомлять не буду, если кого заинтересует проблема и знаете решение, пишите. Далее у меня регулярные выражения и получение текста по тегам элементов, которое тоже не работает адекватно.
 

Форум IT Специалистов