Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   python вопрос по работе скрипта (http://forum.oszone.net/showthread.php?t=339829)

dark-------13 25-03-2019 11:45 2864973

python вопрос по работе скрипта
 
Добрый день есть такой парсер сайта, который должен скачивать изображения с страниц галереи.
Изначально был написан его разработчиком на python 2.75.
Сейчас пытаюсь адаптировать скрипт под python 3.7.2
Не могу понять почему не может найти имя пользователя в адресе.
Сам не программист, адаптирую скрипт для себя.... Помогите пожалуйста
Немного поправил код , теперь выдается другая ошибка:

скрипт

Код:

from __future__ import print_function
from urllib.request import urlopen, urlretrieve
import mechanize
import pickle
import random
import sys
import re
import os


PAGES = []
ARTIST = ""
IMG_BUFF = []
TITLES = []
LOGGED_IN = False


class Page:
    def __init__(self, link=None, search=False):
        global TITLES
        if (search):
            phrase = ""
            while (phrase != '~q'):
                phrase = input("Search ~q to quit: ")
                try:
                    source = "http://" + ARTIST + ".deviantart.com/gallery/?catpath=%2F&q=" + \
                            '+'.join(phrase.split())
                    print("Searching for:", source)
                    gallery = open_page(source)
                    if (re.findall("no deviations yet\!", gallery)):
                        print("No Results")
                        continue
                    print("Results Found")
                    break
                except:
                    print("Bad phrase")
                    continue
        else:
            self.__index = int(int(link[link.find('?offset=') + 8:]) / 24) + 1
            gallery = open_page(link)
        self.__images = []
        blocks = get_blocks(gallery)
        for block in blocks:
            title = re.findall('title="(.*?) by ' + ARTIST, block)[0]
            self.__title = title
            TITLES.append(self.__title)
            self.__images.append(Image(self, self.__title, block))

    def get_images(self):
        return self.__images

    def get_index(self):
        return self.__index


class Image:
    def __init__(self, page, title, block):
        self.__artist = ARTIST
        self.__page = page
        self.__title = title
        self.__date = re.findall(ARTIST + ', (.*?) in', block)[0]
        self.__mature = False
        self.__gif = False
        found = re.findall('data-super-(?:full-)?img="(.*?)"', block) + \
                [re.findall('src="(.*?)"', block)[0]]
        if (len(found) == 3):
            self.__quality = 3
            self.__link = found[1]
        elif (len(found) == 2):
            self.__quality = 2
            self.__link = found[0]
        elif (len(found) == 1):
            self.__quality = 1
            if ('gif' in found[0]):
                self.__gif = True
        if (re.findall('ismature', block)):
            self.__mature = True
        self.__link = found[0]
        self.__ext = self.__link[len(self.__link) - 4:]

    def dl_image(self):
        if (self.__gif) or (self.__mature):
            status = '      ! '
        else:
            status = '\t'
        status += str(self.__quality) + " [.] "
        status += self.__title
        print(status, end='\r')
        mod = 1
        while (self.__title + str(mod) + self.__ext in os.listdir('.')):
            mod += 1
        urlretrieve(self.__link, self.__title.replace('/', '') + str(mod) + self.__ext)
        print(status.replace('.', '+'))

    def get_title(self):
        return self.__title

    def is_mat(self):
        return self.__mature


class NoHistory(object):
    def add(self, *a, **k):
        pass

    def clear(self):
        pass


def daSetBrowser():
    useragents = (
        'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 Safari/535.1',
        'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101',
        'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50',
        'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)',
        'Opera/9.99 (Windows NT 5.1; U; pl) Presto/9.9.9',
        'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-US) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/ Safari/530.5',
        'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/6.0',
        'Mozilla/5.0 (Windows; U; Windows NT 6.1; pl; rv:1.9.1) Gecko/20090624 Firefox/3.5 (.NET CLR 3.5.30729)'
    )
    global BROWSER
    BROWSER = mechanize.Browser(history=NoHistory())
    BROWSER.set_handle_redirect(True)
    BROWSER.set_handle_robots(False)
    BROWSER.addheaders = [('Referer', 'http://www.deviantart.com/')]
    BROWSER.addheaders = [('User-Agent', random.choice(useragents))]


def daLogin(username, password):
    data = ""
    try:
        BROWSER.open('https://www.deviantart.com/users/login', "ref=http%3A%2F%2Fwww.deviantart.com%2F&remember_me=1")
        BROWSER.select_form(nr=1)
        BROWSER.form['username'] = username
        BROWSER.form['password'] = password
        BROWSER.submit()
        data = BROWSER.response().read()
    except urllib.error.HTTPError as e:
        print("HTTP Error:", e.code)
        sys.exit()
    except urllib.error.URLError as e:
        print("URL Error:", e.reason)
        sys.exit()
    if re.search("The password you entered was incorrect", data):
        print("Wrong password or username. Attempting to download anyway.")
    elif re.search("\"loggedIn\":true", data):
        print("Logged in!")
        global LOGGED_IN
        LOGGED_IN = True
    else:
        print("Login unsuccessful. Attempting to download anyway.")


def startup():
    print("\ngetdeviantart 1.0")
    while True:
        artist = input("Enter artist: ").lower()
        try:
            source = "http://" + artist + ".deviantart.com/gallery/?offset=0"
            gallery = open_page(source)
            artist = re.findall('<title>(.*?)&#', gallery)[0]
            print("Found", artist)
            if (re.findall("no deviations yet\!", gallery)):
                print(artist, "has no art.")
                continue
            try:
                os.mkdir(artist)
            except:
                pass
            os.chdir(artist)
            gallery = open_page(source)
            break
        except:
            print("User not found, try again.")
            continue
    global ARTIST
    ARTIST = artist
    return gallery, source


def count_pages(text, source):
    found = re.findall('(\d+)</a></li><li class="next"', text)[0]
    pages = []
    for i in range(0, int(found) * 24, 24):
        pages.append(source[:-1] + str(i))
    return pages


def menu():
    print("\n1) Download all pages\
          \n2) Select pages\
          \n3) Select images page by page\
          \n4) Search for image\
          \n5) Choose different artist\
          \n6) Quit")
    choice = 0
    while (choice < 1) or (choice > 6):
        try:
            choice = int(input("Choice> "))
        except ValueError:
            continue
    return choice


def execute(choice, all_pages, source):
    global PAGES
    global ARTIST
    global IMG_BUFF
    global TITLES

    if (choice == 1):
        download(range(1, len(all_pages) + 1), source)

    elif (choice == 2):
        sel_pages = input_vals(pg=True, last=len(all_pages))
        download(sel_pages, source)

    elif (choice == 3):
        sel_pages = input_vals(pg=True, last=len(all_pages))
        download(sel_pages, source, sel_imgs=True)

    elif (choice == 4):
        search()

    elif (choice == 5):
        PAGES = []
        ARTIST = ""
        IMG_BUFF = []
        TITLES = []


def download(pages, source, sel_imgs=False):
    global PAGES
    page_nums = pages
    source = source[:-1]
    page_links = []
    for var in page_nums:
        page_links.append(source + str((int(var) - 1) * 24))

    for link in page_links:
        PAGES.append(Page(link))
        page = PAGES[-1]
        print("\nPage #", page.get_index())
        buff_down(page, sel_imgs)


def buff_down(page, sel_imgs):
    global IMG_BUFF
    index = 1
    for image in page.get_images():
        if (sel_imgs):
            if (image.is_mat()):
                s = '      ! '
            else:
                s = '\t'
            print(s + str(index) + ')', image.get_title())
            IMG_BUFF.append(image)
            index += 1
        else:
            image.dl_image()
    if (sel_imgs):
        for img in input_vals(img=True, last=len(IMG_BUFF)):
            IMG_BUFF[int(img) - 1].dl_image()
    IMG_BUFF = []


def search():
    page = Page(search=True)
    buff_down(page, True)


def input_vals(pg=False, img=False, last=0):
    output = []
    while True:
        try:
            if (pg):
                in_vals = input("Pages to get/search (1-3,5,6-8 etc): ")
                in_vals = in_vals.replace(' ', '').split(',')
            elif (img):
                in_vals = input("Images to download (1-3,5,6-8 etc): ")
                in_vals = in_vals.replace(' ', '').split(',')
            for val in in_vals:
                if (val.isdigit()):
                    output.append(int(val))
                elif ('-' in val):
                    if not ((val.replace('-', '').isdigit())):
                        raise ValueError
                    else:
                        left = int(val[:val.find('-')])
                        right = int(val[val.find('-') + 1:]) + 1
                        if (left > right):
                            raise ValueError
                        else:
                            output += [int(var) for var in range(left, right)]
                elif (int(val) <= 0):
                    raise ValueError
                else:
                    raise ValueError

            output = [int(a) for a in output]
            if (max(output) > last):
                raise ValueError
            if (output.sort()) != None:
                output = output.sort()
            output = [str(a) for a in output]
            return output

        except ValueError:
            print("Bad format, Try again.")
            output = []
            continue


def get_blocks(text):
    return [re.findall('</smoothie>.*</div>', text)[0]] \
          + re.findall('</span></small><!-- TTT\$ --></span></div> <div.*', text)


def open_page(url):
    if (LOGGED_IN):
        return BROWSER.open(url).read()
    else:
        return urlopen(url).read().decode("utf-8")


def get_account():
    fil = '.DeVaCtinfo.p'
    choice = ''
    while (choice != 'y') and (choice != 'n'):
        choice = input("Log in? (y/n): ").lower()
    if (choice == 'n'):
        return [None, None, 0]
    choice = ''
    while (choice != 'y') and (choice != 'n'):
        choice = input("New Account? (y/n): ").lower()
    if (choice == 'y'):
        print("Use throwaway account..")
        uname = input("Enter account username: ")
        passwd = input("Enter account password: ")
        pickle.dump('\n'.join([uname, passwd]), open(fil, 'wb'))
        return [uname, passwd, 0]
    else:
        try:
            uname, passwd = pickle.load(open(fil, 'rb')).split()
            return [uname, passwd, 0]
        except:
            print("Bad account info or no user on file.")
            return [None, None, 1]


def main():
    global PAGES
    global IMG_BUFF
    global TITLES
    choice = 5
    acl = [None, None, 1]
    while (acl[2] != 0):
        acl = get_account()
    if (acl[0] and acl[1]):
        daSetBrowser()
        daLogin(acl[0], acl[1])
    while (choice != 6):
        if (choice == 5):
            gallery, source = startup()
            all_pages = count_pages(gallery, source)
            print(ARTIST, "has", len(all_pages), "pages of art.")
        choice = menu()
        if (choice == 6):
            break
        else:
            execute(choice, all_pages, source)
            PAGES = []
            IMG_BUFF = []
            TITLES = []
    print("Quitting..")


main()


shisik 25-03-2019 18:03 2865078

Цитата:

Цитата dark-------13
Немного поправил код , теперь выдается другая ошибка: »

А другая ошибка - это какая?

Iska 25-03-2019 18:15 2865080

dark-------13, почему бы не обратиться к автору? Анализ корректности парсинга страниц — дело не быстрое. Здесь дело может быть не в одной ошибке.

Bumbik 25-03-2019 18:37 2865086

для парсинга в питоне есть requests и beautifulsoup, по нормальному все надо переписывать

Iska 25-03-2019 19:27 2865093

Цитата:

Цитата Bumbik
и beautifulsoup, »

Самое то!

dark-------13 26-03-2019 00:46 2865147

Проблема после функции, программа как понимаю останавливается с ошибкой из-за того, что нужных данных не обнаружено:
функция

Код:

def get_blocks(text):
    return [re.findall('</smoothie>.*</div>', text)[0]] \
          + re.findall('</span></span><!-- TTT\$ --></span></div> <div.*', text)



Непонятно как она выбирает данные о ссылках на фотографии для последующего разбора в другой функции. Части из тегов на сайте уже нет и изображения хранятся между другими тегами.

Iska 26-03-2019 06:59 2865157

Цитата:

Цитата dark-------13
Части из тегов на сайте уже нет и изображения хранятся между другими тегами. »

dark-------13, про то и речь. Это не найти и поправить ошибку в коде. Это надо садиться и долго и нудно разбираться сначала в коде, а затем — что и как сейчас на сайте устроено. Это не дело пяти минут.

dark-------13 26-03-2019 08:35 2865167

Цитата:

Цитата Iska
про то и речь. »


Вы могли бы хотя бы на своем примере показать, что какие текстовые данные вернет данная функция ?

Если например создать переменную с такими же тегами - например хоть в тексте программы, а в теги и руками запихнуть пару ссылок на картинки, или текст вместо них.

Вообще как правильно вывести результат ее работы на экран ?

Вот так выглядела оригинальная функция get_block(text ) автора:


так выглядела функция автора:

Код:


def get_blocks(text):
        return [ re.findall('</smoothie>.*</div>', text)[0] ] \
+re.findall('</span></small><!-- TTT\$ --></span></div> <div.*', text)


Iska 26-03-2019 17:38 2865226

dark-------13, не могу. Ни на своём, ни на Вашем. Что нужно по-хорошему сделать — написал выше коллега Bumbik:
Цитата:

Цитата Bumbik
для парсинга в питоне есть requests и beautifulsoup, по нормальному все надо переписывать »

В любом случае это долгое и нудное занятие. Я таким занимался.

dark-------13 27-03-2019 17:03 2865382

Хм, можете объяснить как из одной функции передать кортеж в другую ? Из второй функции я хочу вывести текст на печать.
Что нужно дописать в код фунций ?

Код:

первая функция:
def t():

    text= 'молоко'

Код:

вторая функция:
def g(text):

    return [re.findall ('солнце', text]) [0]]


shisik 27-03-2019 17:50 2865391

Цитата:

Цитата dark-------13
как из одной функции передать кортеж в другую »

Как и любой другой объект.

dark-------13 27-03-2019 18:33 2865401

Цитата:

Цитата shisik
Как и любой другой объект. »

Я писал я не программист. Покажите пожалуйста какой должен быть синтаксис.
Если вы приходите к врачу и спрашиваете как мне вылечиться , - у меня болит живот. Вам врач говорит - да так же, как и лечить воспаление легких. Вам понятно будет как вам лечиться ?

Bumbik 27-03-2019 19:13 2865408

Код:

def text():
    return 'молоко'

Код:

def g():
    return [re.findall('молоко', text())][0]

print(g())


dark-------13 27-03-2019 20:02 2865417

Спасибо большое Bumbik. Вы мне очень помогли. Дальше буду разбираться.

Bumbik 27-03-2019 20:31 2865424

тестировать регулярные выражения удобно тут https://regex101.com/

dark-------13 28-03-2019 10:38 2865528

Цитата Bumbik:
тестировать регулярные выражения удобно тут https://regex101.com/ »
А еще можете вставить кусок HTML страницы в notepad ++ , и выбрать поиск. Установите галочку регулярные выражения, и о чудо то, что вы хотели найти в документе выделяется, если конечно существует.

dark-------13 29-03-2019 13:04 2865753

Всем привет, продолжаю разбираться парсингом картинок с сайта в разных скриптах, и вот в одном из них возникает ошибка.
Помогите пожалуйста , как исправить проблему не знаю .

Скрипт парсит сайт , выбирает ссылки на фотки, загружает на диск, но в какой-то рандомный момент валится с ошибкой, отладчик ссылается на ошибку в функции def name_format(url,title): в строке p2 = name.split('-')[1].split('.')[1]:

еще один скрипт - который парсит сайт:

Код:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import WebDriverException
from bs4 import BeautifulSoup
from queue import Queue
from threading import Thread, Lock
import collections
import datetime
import time
import os
import pathlib
import requests
import subprocess

images  = []
img_num = 0
workers = 20
threads = []
tasks  = Queue()
lock    = Lock()



def get_driver():





    opt = webdriver.ChromeOptions()

    driver = webdriver.Chrome()
    return driver






    return driver




def get_username(d):
    global username
    html = d.page_source
    soup = BeautifulSoup(html, 'html.parser')
    username = soup.find(class_='gruserbadge').find('a').get_text()


def get_thumb_links(q):
    d = get_driver()
    d.get('https://megancoffey.deviantart.com/gallery/')
    unique_img = scroll_page_down(d)
    time.sleep(0.5)
    for img in unique_img:
        q.put(img)
    global expected_img_num
    expected_img_num = str(len(unique_img))
    get_username(d)
    print('  Unique images found = ' + expected_img_num)
    print('  Artist = ' + username + "\n")
    time.sleep(0.5)
    d.close()


def scroll_page_down(d):
    SCROLL_PAUSE_TIME = 1.5
    last_height = d.execute_script("return document.body.scrollHeight")
    while True:
        d.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        time.sleep(SCROLL_PAUSE_TIME)
        new_height = d.execute_script("return document.body.scrollHeight")
        im = d.find_element_by_class_name('folderview-art')
        links = im.find_elements_by_class_name('torpedo-thumb-link')
        for link in links:
            l = link.get_attribute('href')
            images.append(l)
        unique_img = list(set(images))
        time.sleep(0.5)
        if new_height == last_height:
            break
        last_height = new_height
    return unique_img


def get_full_image(l):
    s = requests.Session()





    h = {'User-Agent': 'Firefox'}
    soup = BeautifulSoup(s.get(l, headers=h).text, 'html.parser')
    title = ''
    link = ''
    try:
        link = soup.find('a', class_='dev-page-download')['href']
    except TypeError:
        try:
            link = soup.find('img', class_='dev-content-full')['src']
            title = soup.find('a',
                                class_='title').text.replace(' ', '_').lower()
        except TypeError:
            try:
                link = age_restricted(l)
            except (WebDriverException, AttributeError):
                link = age_restricted(l)
        pass
    req = s.get(link, headers=h)
    time.sleep(0.1)
    download_now(req,title)
    url = req.url
    ITuple = collections.namedtuple('ITuple', ['u', 't'])
    it = ITuple(u=url, t=title)
    return it


def age_restricted(l):
    d = get_driver()
    d.get(l)
    time.sleep(0.8)
    d.find_element_by_class_name('datefields')
    d.find_elements_by_class_name('datefield')
    d.find_element_by_id('month').send_keys('01')
    d.find_element_by_id('day').send_keys('01')
    d.find_element_by_id('year').send_keys('1991')
    d.find_element_by_class_name('tos-label').click()
    d.find_element_by_class_name('submitbutton').click()
    time.sleep(1)
    img_lnk = d.find_element_by_class_name('dev-page-download')
    d.get(img_lnk.get_attribute('href'))
    time.sleep(0.5)
    link = d.current_url
    d.close()
    return link


def name_format(url,title):
    if url.find('/'):
        name = url.rsplit('/', 1)[1]
        p1 = name.split('-')[0]

        p2 = name.split('-')[1].split('.')[1]
        name = p1 + '.' + p2
    if title != '':
        name = title + '.png'
    return name


def download_now(req,title):
    url = req.url
    name = name_format(url,title)
    pathlib.Path('{}.deviantart.com'.format(username)).mkdir(parents=True,
                                                            exist_ok=True)
    with open(os.path.join('{}.deviantart.com/'.format(username),
                                              '{}'.format(name)), 'wb') as file:
        file.write(req.content)


def save_img(url):
    try:
        with open('{}-gallery.txt'.format(username), 'a+') as file:
            file.write(url + '\n')
    except:
        print('An write error occurred.')
        pass


def worker_thread(q, lock):
    while True:
        link = q.get()
        if link is None:
            break
        p = get_full_image(link)
        url = p.u
        title = p.t
        name = name_format(url, title)
        with lock:
            global img_num
            img_num += 1
            save_img(url)
            print('Image ' + str(img_num) + ' - ' + name)
        q.task_done()

def main():
    get_thumb_links(tasks)
    start = time.time()
    for i in range(workers):
        t = Thread(target = worker_thread, args = (tasks, lock))
        t.start()
        threads.append(t)
    tasks.join()
    for _ in range(workers):
        tasks.put(None)
    for t in threads:
        t.join()


    folder_size = subprocess.check_output(['du','-shx','{}.deviantart.com/'.format(username)]).split()[0].decode('utf-8')
    print('\n  Total Images: ' + str(img_num) + ' (' + str(folder_size) + ')')
    print('  Excepted: ' + expected_img_num)
    end = time.time()
    print('  Elapsed Time: {:.4f}\n'.format(end-start))


if __name__ == '__main__':
    try:
        main()
    except KeyboardInterrupt:
        print()








его функция:

Код:

def name_format(url,title):
    if url.find('/'):
        name = url.rsplit('/', 1)[1]
        p1 = name.split('-')[0]

        p2 = name.split('-')[1].split('.')[1]
        name = p1 + '.' + p2
    if title != '':
        name = title + '.png'
    return name



Ошибка следующая:
Код:

List index out the range и указывает на    p2 = name.split('-')[1].split('.')[1]

Iska 29-03-2019 16:36 2865788

dark-------13, сначала «ручками» проверьте, что в name содержится хотя бы один символ «-», затем проверьте, что в name.split('-')[1] содержится хотя бы один символ «.». Явно нет либо одного, либо другого. Почему нет — смотрите сами.

Bumbik 29-03-2019 19:19 2865830

попробуй обернуть этот операцию в блок try, except дабы выловить ошибку

Код:

def name_format(url,title):
    if url.find('/'):
        name = url.rsplit('/', 1)[1]
        p1 = name.split('-')[0]
        try:
            p2 = name.split('-')[1].split('.')[1]
        except IndexError as err:
            print(name, err)
            raise Exception
        name = p1 + '.' + p2
    if title != '':
        name = title + '.png'
    return name

ошибка List index out the range указывает что там нет индекса 1 который у тебя в квадратных скобках [1]

Iska 29-03-2019 19:34 2865836

Цитата:

Цитата Bumbik
попробуй обернуть этот операцию в блок try, except дабы выловить ошибку »

А что это ему даст? Там надо смотреть, почему там нет того или другого.

Bumbik 29-03-2019 19:40 2865837

Код:

name = 'чтототут'
a = name.split('.')
b = name.split('-')

ошибку не вызовет хоть в name нет ни точки ни тире

Iska 29-03-2019 22:29 2865866

Цитата:

Цитата Bumbik
ошибку не вызовет хоть в name нет ни точки ни тире »

Естественно. А вот попытка обратиться к несуществующему второму элементу возвращённого list вызовет ошибку. И надо смотреть, почему там нет того или другого.

Bumbik 29-03-2019 22:40 2865872

Цитата:

Цитата Iska
Естественно. А вот попытка обратиться к несуществующему второму элементу возвращённого list вызовет ошибку. И надо смотреть, почему там нет того или другого. »

Так я о чем, нет индекса 1 отчего и ошибка
Код:

name = 'ляляля-труляля.ляля'
p2 = name.split('-')[1].split('.')[1]

тут не будет ошибки
Код:

name = 'лял.яля-труляляляля'
p2 = name.split('-')[1].split('.')[1]

а тут будет

dark-------13 30-03-2019 22:13 2866010

Протестировал скрипт , выдается строка с ошибкой при обработке картинок названием в ссылке - представленном в виде:


Код:

dc3wr2h-3eb6c8a7-07bd-4403-8766-c095f7ecab80.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7InBhdGgiOiJcL2ZcLzJlNWI0ZDcyLWZjNGQtNGQwZi05NDAxLWE0NDBkOThmOTY5NVwvZGMzd3IyaC0zZWI2YzhhNy0wN2JkLTQ0MDMtODc2Ni1jMDk1ZjdlY2FiODAuanBnIn1dXSwiYXVkIjpbInVybjpzZXJ2aWNlOmZpbGUuZG93bmxvYWQiXX0.FvO7BxBgLnat6ae2GRiyhIqJ_dlFDPViQ03T9MNWHtc list index out of range

Bumbik 31-03-2019 08:20 2866057

Ну во-первых твоя функция начинается с:
Код:

if url.find('/'):
Это вернет -1 если не найдет символ '/' в url и так или иначе это будет True, значит зайдет в этот блок, лучше делать так:
Код:

if '/' in url:
Потом вот это лучше помести в самый верх:
Код:

if title:
        return title + '.png'

Помойму тут нужна другая логика, а чего ошибка это очевидно

dark-------13 31-03-2019 09:39 2866059

после внесения изменений в скрипт , он возвращает с ошибкой строки следующего вида:

Код:

rainbow_mermaid_vii_by_megancoffey_dd30wvy-fullview.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9MTkyMCIsInBhdGgiOiJcL2ZcLzJlNWI0ZDcyLWZjNGQtNGQwZi05NDAxLWE0NDBkOThmOTY5NVwvZGQzMHd2eS0zYjc0Y2E0NS0wOGViLTQ1YjUtODcxZi1iZmRiNzVhYzk5ZmUuanBnIiwid2lkdGgiOiI8PTEyODAifV1dLCJhdWQiOlsidXJuOnNlcnZpY2U6aW1hZ2Uub3BlcmF0aW9ucyJdfQ.0oDEZ7NFFBRJn9Rf7Z6BtPv7q2gSi9exP3B7MHu-Qlk

и такую если print(name) находится после while



Код:

ratalanta___gardens_xix_by_megancoffey_dd1w4av.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9

Bumbik 31-03-2019 10:38 2866064

Не совсем понимаю что ты хочешь с урлом сделать в этой функции, да и важно так же что за ошибка, скорей всего тут опять indexerror

Если тебе нужно распарсить ссылку, тогда вместо чем изобретать велосипед с хождение по граблям посоветую взглянуть на встроенный в питон модуль urllib.parse, может это то что тебе нужно

dark-------13 31-03-2019 12:41 2866071

Хм на примера JAVA советуют сделать так:

Код:


String num = s.next();
String[] parts = num.split("\\.");

http://qaru.site/questions/11438648/...-out-of-bounds

dark-------13 05-04-2019 09:38 2866678

Привет, хотел кое-что проверить, написал скрипт, а он данные из файла не читает и не выводит на экран. Подскажите пожалуйста в чем проблема.

скрипт

Код:

def readdd(a):
 text = open(r'L:\test\links.txt','r')
 d= text.read()
 print(d)
 text.close()





И еще вопрос как заставить python обрабатывать написанный код без использования функций ? Убираю def ругается.



еще пробовал такой вариант:
второй вариант:
Код:


def readdd(a):

 #text = open(r'L:\test\links.txt','r')

 text = open('l:\\test\\links.txt','r', encoding='utf-8')  # Windows
 mytxt = text.readline()
 for line in mytxt:
  print(line)
 mytxt.close()



Так , похоже дело было в отступах. Зато теперь пишет ошибку после вывода содержимого документа.

выполняется скрипт:
---
Код:

text = open('l:/test/links.txt','r')  # Windows
mytxt = text.read()
print(mytxt)
mytxt.close()



И вот такая ошибка:
ошибка:

Код:


Traceback (most recent call last):
  File "C:/python_parser_4/venv/Scripts/test_0004.py", line 38, in <module>
    mytxt.close()
AttributeError: 'str' object has no attribute 'close'


dark-------13 05-04-2019 11:44 2866702

Пытаюсь считать сохраненный в текcтовом файле код html - в переменную, и применить к коду bs4 чтобы выбрать ссылки между тегами.

Скрипт вот такой:
---


Код:



s = requests.Session()
text = open('l:/test/links.txt','r')
mytxt = text.read()

#link = soup.find('a', class_='torpedo-thumb-link')['src']
#soup.find_all('a', {'torpedo-thumb-link' : re.compile('^c') }):
soup = bs4.BeautifulSoup(mytxt)
for links in soup.find('a', class_='torpedo-thumb-link')['src']:
    print (''.join(links.find(text=True)))


mytxt.close()




Ничего не получается :(


Изменил скрипт выше на следующий:

---- 2


Код:

with open('l:/test/links.txt') as f:
    lines = f.read()
soup = bs4.BeautifulSoup(lines)
#soup = bs4.BeautifulSoup(mytxt)
for links in soup.find_all('a', {'class': 'torpedo-thumb-link'}):
    print (links)




выдает ошибку и выводит на экран найденное:

Почему ругается не понятно, если знаете подскажите пожалуйста.

----


Код:


"C:\Program Files (x86)\Python37-32\python.exe" C:/python_parser_4/venv/Scripts/test_0004.py
C:/python_parser_4/venv/Scripts/test_0004.py:46: UserWarning: No parser was explicitly specified, so I'm using the best available HTML parser for this system ("lxml"). This usually isn't a problem, but if you run this code on another system, or in a different virtual environment, it may use a different parser and behave differently.

The code that caused this warning is on line 46 of the file C:/python_parser_4/venv/Scripts/test_0004.py. To get rid of this warning, pass the additional argument 'features="lxml"' to the BeautifulSoup constructor.

  soup = bs4.BeautifulSoup(lines)
<a class="torpedo-thumb-link" href="https://www.deviantart.com/megancoffey/art/Rooftop-Samus-V-787971691"><img alt="Rooftop Samus V by MeganCoffey" data-sigil="torpedo-img" src="https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/2e5b4d72-fc4d-4d0f-9401-a440d98f9695/dd14yuj-aa8bdcee-2168-46b2-bac2-0f07c6868967.jpg/v1/fill/w_167,h_250,q_70,strp/rooftop_samus_v_by_megancoffey_dd14yuj-250t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9MTkyMCIsInBhdGgiOiJcL2ZcLzJlNWI0ZDcyLWZjNGQtNGQwZi05NDAxLWE0NDBkOThmOTY5NVwvZGQxNHl1ai1hYThiZGNlZS0yMTY4LTQ2YjItYmFjMi0wZjA3YzY4Njg5NjcuanBnIiwid2lkdGgiOiI8PTEyODAifV1dLCJhdWQiOlsidXJuOnNlcnZpY2U6aW1hZ2Uub3BlcmF0aW9ucyJdfQ.AjDOsD5n0tHPMICD133jMA1zpdeFN8mWRjms1pPVuYY"/> <span class="saved-faved-corner" data-sigil="saved-faved-corner"></span>
</a>
<a class="torpedo-thumb-link" href="https://www.deviantart.com/megancoffey/art/Rooftop-Samus-IV-787971667"><img alt="Rooftop Samus IV by MeganCoffey" data-sigil="torpedo-img" src="https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/2e5b4d72-fc4d-4d0f-9401-a440d98f9695/dd14ytv-b805b13f-005c-4466-8946-1b09c2abb725.jpg/v1/fill/w_167,h_250,q_70,strp/rooftop_samus_iv_by_megancoffey_dd14ytv-250t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9MTkyMCIsInBhdGgiOiJcL2ZcLzJlNWI0ZDcyLWZjNGQtNGQwZi05NDAxLWE0NDBkOThmOTY5NVwvZGQxNHl0di1iODA1YjEzZi0wMDVjLTQ0NjYtODk0Ni0xYjA5YzJhYmI3MjUuanBnIiwid2lkdGgiOiI8PTEyODAifV1dLCJhdWQiOlsidXJuOnNlcnZpY2U6aW1hZ2Uub3BlcmF0aW9ucyJdfQ.QEnfbHeiyXlQYIiihhYy-ior7QbA0_kcv-8L5_m4L98"/> <span class="saved-faved-corner" data-sigil="saved-faved-corner"></span>
</a>
<a class="torpedo-thumb-link" href="https://www.deviantart.com/megancoffey/art/Rooftop-Samus-III-787971655"><img alt="Rooftop Samus III by MeganCoffey" data-sigil="torpedo-img" src="https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/2e5b4d72-fc4d-4d0f-9401-a440d98f9695/dd14ytj-f73b69b7-2dba-469d-a9df-74e2f3ca9b8a.jpg/v1/crop/w_167,h_250,x_0,y_0,scl_0.045269720791542,q_70,strp/rooftop_samus_iii_by_megancoffey_dd14ytj-250t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9MTkyMSIsInBhdGgiOiJcL2ZcLzJlNWI0ZDcyLWZjNGQtNGQwZi05NDAxLWE0NDBkOThmOTY5NVwvZGQxNHl0ai1mNzNiNjliNy0yZGJhLTQ2OWQtYTlkZi03NGUyZjNjYTliOGEuanBnIiwid2lkdGgiOiI8PTEyODAifV1dLCJhdWQiOlsidXJuOnNlcnZpY2U6aW1hZ2Uub3BlcmF0aW9ucyJdfQ.hvtwc3X6IDgNGgxY4Xt8YDGaaWOXX6EpRp7XyxEBIz8"/> <span class="saved-faved-corner" data-sigil="saved-faved-corner"></span>
</a>
<a class="torpedo-thumb-link" href="https://www.deviantart.com/megancoffey/art/Rooftop-Samus-II-787971579"><img alt="Rooftop Samus II by MeganCoffey" data-sigil="torpedo-img" src="https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/2e5b4d72-fc4d-4d0f-9401-a440d98f9695/dd14yrf-3ae13dae-cdb6-43cc-993d-63308351e0bf.jpg/v1/crop/w_167,h_250,x_0,y_0,scl_0.042602040816327,q_70,strp/rooftop_samus_ii_by_megancoffey_dd14yrf-250t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9MTkyMCIsInBhdGgiOiJcL2ZcLzJlNWI0ZDcyLWZjNGQtNGQwZi05NDAxLWE0NDBkOThmOTY5NVwvZGQxNHlyZi0zYWUxM2RhZS1jZGI2LTQzY2MtOTkzZC02MzMwODM1MWUwYmYuanBnIiwid2lkdGgiOiI8PTEyODAifV1dLCJhdWQiOlsidXJuOnNlcnZpY2U6aW1hZ2Uub3BlcmF0aW9ucyJdfQ.rhsBYnEVcfPJfDhhbCWFLbgKaqZwy8ZSHX99DS3qUjs"/> <span class="saved-faved-corner" data-sigil="saved-faved-corner"></span>
</a>
<a class="torpedo-thumb-link" href="https://www.deviantart.com/megancoffey/art/Rooftop-Samus-784515165"><img alt="Rooftop Samus by MeganCoffey" data-sigil="torpedo-img" src="https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/2e5b4d72-fc4d-4d0f-9401-a440d98f9695/dcz2vrx-57d7ace1-3896-448a-96fa-034c1a4ca6ed.jpg/v1/crop/w_167,h_250,x_0,y_0,scl_0.044868350349275,q_70,strp/rooftop_samus_by_megancoffey_dcz2vrx-250t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9MTkyMCIsInBhdGgiOiJcL2ZcLzJlNWI0ZDcyLWZjNGQtNGQwZi05NDAxLWE0NDBkOThmOTY5NVwvZGN6MnZyeC01N2Q3YWNlMS0zODk2LTQ0OGEtOTZmYS0wMzRjMWE0Y2E2ZWQuanBnIiwid2lkdGgiOiI8PTEyODAifV1dLCJhdWQiOlsidXJuOnNlcnZpY2U6aW1hZ2Uub3BlcmF0aW9ucyJdfQ._MEeGr79Hh6j3x3dFCHWZd2egxH8od4KUHj5L8SGOao"/> <span class="saved-faved-corner" data-sigil="saved-faved-corner"></span>
</a>
<a class="torpedo-thumb-link" href="https://www.deviantart.com/megancoffey/art/Rainbow-Mermaid-XIV-791141789"><img alt="Rainbow Mermaid XIV by MeganCoffey" data-sigil="torpedo-img" src="https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/2e5b4d72-fc4d-4d0f-9401-a440d98f9695/dd30wwt-26854c01-a144-4e40-becd-b19db322cca2.jpg/v1/crop/w_167,h_250,x_0,y_0,scl_0.04175,q_70,strp/rainbow_mermaid_xiv_by_megancoffey_dd30wwt-250t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9MTkyMCIsInBhdGgiOiJcL2ZcLzJlNWI0ZDcyLWZjNGQtNGQwZi05NDAxLWE0NDBkOThmOTY5NVwvZGQzMHd3dC0yNjg1NGMwMS1hMTQ0LTRlNDAtYmVjZC1iMTlkYjMyMmNjYTIuanBnIiwid2lkdGgiOiI8PTEyODAifV1dLCJhdWQiOlsidXJuOnNlcnZpY2U6aW1hZ2Uub3BlcmF0aW9ucyJdfQ.YZl1Bn2_P0OFdUKeOwUXr-3hNsLbrEjoCA1LAoMG4gI"/> <span class="saved-faved-corner" data-sigil="saved-faved-corner"></span>
</a>
<a class="torpedo-thumb-link" href="https://www.deviantart.com/megancoffey/art/Rainbow-Mermaid-XIII-791141661"><img alt="Rainbow Mermaid XIII by MeganCoffey" data-sigil="torpedo-img" src="https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/2e5b4d72-fc4d-4d0f-9401-a440d98f9695/dd30wt9-ef10d2fd-b5ce-424c-af1e-d77c8fec60fb.jpg/v1/fill/w_401,h_250,q_70,strp/rainbow_mermaid_xiii_by_megancoffey_dd30wt9-250t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9Nzk4IiwicGF0aCI6IlwvZlwvMmU1YjRkNzItZmM0ZC00ZDBmLTk0MDEtYTQ0MGQ5OGY5Njk1XC9kZDMwd3Q5LWVmMTBkMmZkLWI1Y2UtNDI0Yy1hZjFlLWQ3N2M4ZmVjNjBmYi5qcGciLCJ3aWR0aCI6Ijw9MTI4MCJ9XV0sImF1ZCI6WyJ1cm46c2VydmljZTppbWFnZS5vcGVyYXRpb25zIl19.sxyUru2-vf-5EpBFH9nKLAgbClIi0Whg4Fzw5WNrfyM"/> <span class="saved-faved-corner" data-sigil="saved-faved-corner"></span>
</a>
<a class="torpedo-thumb-link" href="https://www.deviantart.com/megancoffey/art/Rainbow-Mermaid-XII-791141698"><img alt="Rainbow Mermaid XII by MeganCoffey" data-sigil="torpedo-img" src="https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/2e5b4d72-fc4d-4d0f-9401-a440d98f9695/dd30wua-bf1b6d7b-38fd-4c6d-b785-65d8c630c909.jpg/v1/crop/w_167,h_250,x_0,y_0,scl_0.04175,q_70,strp/rainbow_mermaid_xii_by_megancoffey_dd30wua-250t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9MTkyMCIsInBhdGgiOiJcL2ZcLzJlNWI0ZDcyLWZjNGQtNGQwZi05NDAxLWE0NDBkOThmOTY5NVwvZGQzMHd1YS1iZjFiNmQ3Yi0zOGZkLTRjNmQtYjc4NS02NWQ4YzYzMGM5MDkuanBnIiwid2lkdGgiOiI8PTEyODAifV1dLCJhdWQiOlsidXJuOnNlcnZpY2U6aW1hZ2Uub3BlcmF0aW9ucyJdfQ.MCium9kcmTZLxETUbP69lvwInTiw-5Mk9Wff__5FJSY"/> <span class="saved-faved-corner" data-sigil="saved-faved-corner"></span>
</a>
<a class="torpedo-thumb-link" href="https://www.deviantart.com/megancoffey/art/Rainbow-Mermaid-XI-791141894"><img alt="Rainbow Mermaid XI by MeganCoffey" data-sigil="torpedo-img" src="https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/2e5b4d72-fc4d-4d0f-9401-a440d98f9695/dd30wzq-0b0a1984-745c-41d5-8a6f-57df16803a27.jpg/v1/crop/w_167,h_250,x_0,y_0,scl_0.04175,q_70,strp/rainbow_mermaid_xi_by_megancoffey_dd30wzq-250t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9MTkyMCIsInBhdGgiOiJcL2ZcLzJlNWI0ZDcyLWZjNGQtNGQwZi05NDAxLWE0NDBkOThmOTY5NVwvZGQzMHd6cS0wYjBhMTk4NC03NDVjLTQxZDUtOGE2Zi01N2RmMTY4MDNhMjcuanBnIiwid2lkdGgiOiI8PTEyODAifV1dLCJhdWQiOlsidXJuOnNlcnZpY2U6aW1hZ2Uub3BlcmF0aW9ucyJdfQ.gDPFdIkJ_tiarHzzRQSMFfZxmsYfiDrLvoAVOqPq4Xg"/> <span class="saved-faved-corner" data-sigil="saved-faved-corner"></span>
</a>
<a class="torpedo-thumb-link" href="https://www.deviantart.com/megancoffey/art/Rainbow-Mermaid-X-791141821"><img alt="Rainbow Mermaid X by MeganCoffey" data-sigil="torpedo-img" src="https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/2e5b4d72-fc4d-4d0f-9401-a440d98f9695/dd30wxp-218415a3-8e36-4014-8f04-a5840c920fa4.jpg/v1/fill/w_177,h_250,q_70,strp/rainbow_mermaid_x_by_megancoffey_dd30wxp-250t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9MTgxMCIsInBhdGgiOiJcL2ZcLzJlNWI0ZDcyLWZjNGQtNGQwZi05NDAxLWE0NDBkOThmOTY5NVwvZGQzMHd4cC0yMTg0MTVhMy04ZTM2LTQwMTQtOGYwNC1hNTg0MGM5MjBmYTQuanBnIiwid2lkdGgiOiI8PTEyODAifV1dLCJhdWQiOlsidXJuOnNlcnZpY2U6aW1hZ2Uub3BlcmF0aW9ucyJdfQ.R0nxMJWfRA7benALfvPReJLBNzRVAeSDNqyAajXjdL4"/> <span class="saved-faved-corner" data-sigil="saved-faved-corner"></span>
</a>
<a class="torpedo-thumb-link" href="https://www.deviantart.com/megancoffey/art/Rainbow-Mermaid-IX-791141743"><img alt="Rainbow Mermaid IX by MeganCoffey" data-sigil="torpedo-img" src="https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/2e5b4d72-fc4d-4d0f-9401-a440d98f9695/dd30wvj-65e8ce01-763d-4578-b6db-a7b23f4ac83c.jpg/v1/fill/w_375,h_250,q_70,strp/rainbow_mermaid_ix_by_megancoffey_dd30wvj-250t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9ODU0IiwicGF0aCI6IlwvZlwvMmU1YjRkNzItZmM0ZC00ZDBmLTk0MDEtYTQ0MGQ5OGY5Njk1XC9kZDMwd3ZqLTY1ZThjZTAxLTc2M2QtNDU3OC1iNmRiLWE3YjIzZjRhYzgzYy5qcGciLCJ3aWR0aCI6Ijw9MTI4MCJ9XV0sImF1ZCI6WyJ1cm46c2VydmljZTppbWFnZS5vcGVyYXRpb25zIl19.qnMuUboV1tOfLmU2o9XXNEWzPtwUdAf4RxEasczHQxA"/> <span class="saved-faved-corner" data-sigil="saved-faved-corner"></span>
</a>
<a class="torpedo-thumb-link" href="https://www.deviantart.com/megancoffey/art/Rainbow-Mermaid-VIII-791141886"><img alt="Rainbow Mermaid VIII by MeganCoffey" data-sigil="torpedo-img" src="https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/2e5b4d72-fc4d-4d0f-9401-a440d98f9695/dd30wzi-35e88476-6855-43b8-b594-063e5eb2cc7e.jpg/v1/crop/w_190,h_250,x_0,y_0,scl_0.050788559208768,q_70,strp/rainbow_mermaid_viii_by_megancoffey_dd30wzi-250t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9MTY4OSIsInBhdGgiOiJcL2ZcLzJlNWI0ZDcyLWZjNGQtNGQwZi05NDAxLWE0NDBkOThmOTY5NVwvZGQzMHd6aS0zNWU4ODQ3Ni02ODU1LTQzYjgtYjU5NC0wNjNlNWViMmNjN2UuanBnIiwid2lkdGgiOiI8PTEyODAifV1dLCJhdWQiOlsidXJuOnNlcnZpY2U6aW1hZ2Uub3BlcmF0aW9ucyJdfQ.h1gKTdedeEwfzPIhBFE8Y7OsB_Nf_q2udoHxMQcnXr4"/> <span class="saved-faved-corner" data-sigil="saved-faved-corner"></span>
</a>
<a class="torpedo-thumb-link" href="https://www.deviantart.com/megancoffey/art/Rainbow-Mermaid-VII-791141758"><img alt="Rainbow Mermaid VII by MeganCoffey" data-sigil="torpedo-img" src="https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/2e5b4d72-fc4d-4d0f-9401-a440d98f9695/dd30wvy-3b74ca45-08eb-45b5-871f-bfdb75ac99fe.jpg/v1/crop/w_167,h_250,x_0,y_0,scl_0.04175,q_70,strp/rainbow_mermaid_vii_by_megancoffey_dd30wvy-250t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9MTkyMCIsInBhdGgiOiJcL2ZcLzJlNWI0ZDcyLWZjNGQtNGQwZi05NDAxLWE0NDBkOThmOTY5NVwvZGQzMHd2eS0zYjc0Y2E0NS0wOGViLTQ1YjUtODcxZi1iZmRiNzVhYzk5ZmUuanBnIiwid2lkdGgiOiI8PTEyODAifV1dLCJhdWQiOlsidXJuOnNlcnZpY2U6aW1hZ2Uub3BlcmF0aW9ucyJdfQ.0oDEZ7NFFBRJn9Rf7Z6BtPv7q2gSi9exP3B7MHu-Qlk"/> <span class="saved-faved-corner" data-sigil="saved-faved-corner"></span>
</a>
<a class="torpedo-thumb-link" href="https://www.deviantart.com/megancoffey/art/Rainbow-Mermaid-VI-791141723"><img alt="Rainbow Mermaid VI by MeganCoffey" data-sigil="torpedo-img" src="https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/2e5b4d72-fc4d-4d0f-9401-a440d98f9695/dd30wuz-d1293fed-1ad8-4688-954b-09800972596f.jpg/v1/crop/w_167,h_250,x_0,y_0,scl_0.04175,q_70,strp/rainbow_mermaid_vi_by_megancoffey_dd30wuz-250t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9MTkyMCIsInBhdGgiOiJcL2ZcLzJlNWI0ZDcyLWZjNGQtNGQwZi05NDAxLWE0NDBkOThmOTY5NVwvZGQzMHd1ei1kMTI5M2ZlZC0xYWQ4LTQ2ODgtOTU0Yi0wOTgwMDk3MjU5NmYuanBnIiwid2lkdGgiOiI8PTEyODAifV1dLCJhdWQiOlsidXJuOnNlcnZpY2U6aW1hZ2Uub3BlcmF0aW9ucyJdfQ.e7lfJQwhmz3wWsrPclKXkwCMr-cK747SGDEkyg_YC_s"/> <span class="saved-faved-corner" data-sigil="saved-faved-corner"></span>
</a>
<a class="torpedo-thumb-link" href="https://www.deviantart.com/megancoffey/art/Rainbow-Mermaid-V-791141509"><img alt="Rainbow Mermaid V by MeganCoffey" data-sigil="torpedo-img" src="https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/2e5b4d72-fc4d-4d0f-9401-a440d98f9695/dd30wp1-b6738e7d-5720-4edb-9704-05452f7d2a66.jpg/v1/fill/w_375,h_250,q_70,strp/rainbow_mermaid_v_by_megancoffey_dd30wp1-250t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9ODU0IiwicGF0aCI6IlwvZlwvMmU1YjRkNzItZmM0ZC00ZDBmLTk0MDEtYTQ0MGQ5OGY5Njk1XC9kZDMwd3AxLWI2NzM4ZTdkLTU3MjAtNGVkYi05NzA0LTA1NDUyZjdkMmE2Ni5qcGciLCJ3aWR0aCI6Ijw9MTI4MCJ9XV0sImF1ZCI6WyJ1cm46c2VydmljZTppbWFnZS5vcGVyYXRpb25zIl19.kC72loTnynMXXuhrIUkAsqUO6Qxf_jGK6SKtg9RArMY"/> <span class="saved-faved-corner" data-sigil="saved-faved-corner"></span>
</a>
<a class="torpedo-thumb-link" href="https://www.deviantart.com/megancoffey/art/Rainbow-Mermaid-IV-791141885"><img alt="Rainbow Mermaid IV by MeganCoffey" data-sigil="torpedo-img" src="https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/2e5b4d72-fc4d-4d0f-9401-a440d98f9695/dd30wzh-648196b6-383a-4467-a632-bd01679da373.jpg/v1/crop/w_167,h_250,x_0,y_0,scl_0.046687168017892,q_70,strp/rainbow_mermaid_iv_by_megancoffey_dd30wzh-250t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9MTkyMSIsInBhdGgiOiJcL2ZcLzJlNWI0ZDcyLWZjNGQtNGQwZi05NDAxLWE0NDBkOThmOTY5NVwvZGQzMHd6aC02NDgxOTZiNi0zODNhLTQ0NjctYTYzMi1iZDAxNjc5ZGEzNzMuanBnIiwid2lkdGgiOiI8PTEyODAifV1dLCJhdWQiOlsidXJuOnNlcnZpY2U6aW1hZ2Uub3BlcmF0aW9ucyJdfQ.ZKb2LBlsVbgC5P94Js4jWrpNrck8BihKwNfsMukNFYM"/> <span class="saved-faved-corner" data-sigil="saved-faved-corner"></span>
</a>
<a class="torpedo-thumb-link" href="https://www.deviantart.com/megancoffey/art/Rainbow-Mermaid-III-791141811"><img alt="Rainbow Mermaid III by MeganCoffey" data-sigil="torpedo-img" src="https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/2e5b4d72-fc4d-4d0f-9401-a440d98f9695/dd30wxf-1e3849a2-7522-471c-81dc-49812a6a874c.jpg/v1/crop/w_167,h_250,x_0,y_0,scl_0.04175,q_70,strp/rainbow_mermaid_iii_by_megancoffey_dd30wxf-250t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9MTkyMCIsInBhdGgiOiJcL2ZcLzJlNWI0ZDcyLWZjNGQtNGQwZi05NDAxLWE0NDBkOThmOTY5NVwvZGQzMHd4Zi0xZTM4NDlhMi03NTIyLTQ3MWMtODFkYy00OTgxMmE2YTg3NGMuanBnIiwid2lkdGgiOiI8PTEyODAifV1dLCJhdWQiOlsidXJuOnNlcnZpY2U6aW1hZ2Uub3BlcmF0aW9ucyJdfQ.1zzNUQDxf06XZQdKr3uAnzp4eeY92SQLEdbdRiUMrlM"/> <span class="saved-faved-corner" data-sigil="saved-faved-corner"></span>
</a>
<a class="torpedo-thumb-link" href="https://www.deviantart.com/megancoffey/art/Rainbow-Mermaid-II-791141860"><img alt="Rainbow Mermaid II by MeganCoffey" data-sigil="torpedo-img" src="https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/2e5b4d72-fc4d-4d0f-9401-a440d98f9695/dd30wys-45f386e3-f6e4-4405-b894-73afae214565.jpg/v1/fill/w_375,h_250,q_70,strp/rainbow_mermaid_ii_by_megancoffey_dd30wys-250t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9ODU0IiwicGF0aCI6IlwvZlwvMmU1YjRkNzItZmM0ZC00ZDBmLTk0MDEtYTQ0MGQ5OGY5Njk1XC9kZDMwd3lzLTQ1ZjM4NmUzLWY2ZTQtNDQwNS1iODk0LTczYWZhZTIxNDU2NS5qcGciLCJ3aWR0aCI6Ijw9MTI4MCJ9XV0sImF1ZCI6WyJ1cm46c2VydmljZTppbWFnZS5vcGVyYXRpb25zIl19.3GbIK1GRcmbK38SlIDMj1__ofMpVtBGRvbpt3MeKAFc"/> <span class="saved-faved-corner" data-sigil="saved-faved-corner"></span>
</a>
<a class="torpedo-thumb-link" href="https://www.deviantart.com/megancoffey/art/Rainbow-Mermaid-791141901"><img alt="Rainbow Mermaid by MeganCoffey" data-sigil="torpedo-img" src="https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/2e5b4d72-fc4d-4d0f-9401-a440d98f9695/dd30wzx-60db43ba-b314-4b95-8ee1-8787e938c0d7.jpg/v1/fill/w_375,h_250,q_70,strp/rainbow_mermaid_by_megancoffey_dd30wzx-250t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9ODU0IiwicGF0aCI6IlwvZlwvMmU1YjRkNzItZmM0ZC00ZDBmLTk0MDEtYTQ0MGQ5OGY5Njk1XC9kZDMwd3p4LTYwZGI0M2JhLWIzMTQtNGI5NS04ZWUxLTg3ODdlOTM4YzBkNy5qcGciLCJ3aWR0aCI6Ijw9MTI4MCJ9XV0sImF1ZCI6WyJ1cm46c2VydmljZTppbWFnZS5vcGVyYXRpb25zIl19.OV2nJlrUw9ydyEYqf3So_oMfXFHg9wc1X0z4QRdoYPg"/> <span class="saved-faved-corner" data-sigil="saved-faved-corner"></span>
</a>
<a class="torpedo-thumb-link" href="https://www.deviantart.com/megancoffey/art/Saint-Martha-791387010"><img alt="Saint Martha by MeganCoffey" data-sigil="torpedo-img" src="https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/2e5b4d72-fc4d-4d0f-9401-a440d98f9695/dd3664i-e9975385-90cf-488f-b59b-f37a2ce5443a.jpg/v1/fill/w_375,h_250,q_70,strp/saint_martha_by_megancoffey_dd3664i-250t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9ODU0IiwicGF0aCI6IlwvZlwvMmU1YjRkNzItZmM0ZC00ZDBmLTk0MDEtYTQ0MGQ5OGY5Njk1XC9kZDM2NjRpLWU5OTc1Mzg1LTkwY2YtNDg4Zi1iNTliLWYzN2EyY2U1NDQzYS5qcGciLCJ3aWR0aCI6Ijw9MTI4MCJ9XV0sImF1ZCI6WyJ1cm46c2VydmljZTppbWFnZS5vcGVyYXRpb25zIl19.eKHSLuZzOo_GfkxIGXG_dkhyMA2zlOsy633hqoTRGNU"/> <span class="saved-faved-corner" data-sigil="saved-faved-corner"></span>
</a>
<a class="torpedo-thumb-link" href="https://www.deviantart.com/megancoffey/art/Freshwater-Mermaid-XII-791141495"><img alt="Freshwater Mermaid XII by MeganCoffey" data-sigil="torpedo-img" src="https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/2e5b4d72-fc4d-4d0f-9401-a440d98f9695/dd30won-1f3a9ea7-0459-4c79-9f2d-ee608a06ebe1.jpg/v1/fill/w_375,h_250,q_70,strp/freshwater_mermaid_xii_by_megancoffey_dd30won-250t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9ODU0IiwicGF0aCI6IlwvZlwvMmU1YjRkNzItZmM0ZC00ZDBmLTk0MDEtYTQ0MGQ5OGY5Njk1XC9kZDMwd29uLTFmM2E5ZWE3LTA0NTktNGM3OS05ZjJkLWVlNjA4YTA2ZWJlMS5qcGciLCJ3aWR0aCI6Ijw9MTI4MCJ9XV0sImF1ZCI6WyJ1cm46c2VydmljZTppbWFnZS5vcGVyYXRpb25zIl19.OCz3tqxMtt5bk_eJwXNcFSdvhXlP6bqw1UT2Is2VTTw"/> <span class="saved-faved-corner" data-sigil="saved-faved-corner"></span>
</a>
<a class="torpedo-thumb-link" href="https://www.deviantart.com/megancoffey/art/Freshwater-Mermaid-XI-791141483"><img alt="Freshwater Mermaid XI by MeganCoffey" data-sigil="torpedo-img" src="https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/2e5b4d72-fc4d-4d0f-9401-a440d98f9695/dd30wob-e8e5a5ba-f2b8-47ae-92fd-f6dbc94dfc67.jpg/v1/crop/w_167,h_250,x_0,y_0,scl_0.04175,q_70,strp/freshwater_mermaid_xi_by_megancoffey_dd30wob-250t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9MTkyMCIsInBhdGgiOiJcL2ZcLzJlNWI0ZDcyLWZjNGQtNGQwZi05NDAxLWE0NDBkOThmOTY5NVwvZGQzMHdvYi1lOGU1YTViYS1mMmI4LTQ3YWUtOTJmZC1mNmRiYzk0ZGZjNjcuanBnIiwid2lkdGgiOiI8PTEyODAifV1dLCJhdWQiOlsidXJuOnNlcnZpY2U6aW1hZ2Uub3BlcmF0aW9ucyJdfQ.HIsFhyCktLv7oEh8nuIOupn2h8vpIBPVxqCeKekR3RE"/> <span class="saved-faved-corner" data-sigil="saved-faved-corner"></span>
</a>
<a class="torpedo-thumb-link" href="https://www.deviantart.com/megancoffey/art/Freshwater-Mermaid-X-791141477"><img alt="Freshwater Mermaid X by MeganCoffey" data-sigil="torpedo-img" src="https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/2e5b4d72-fc4d-4d0f-9401-a440d98f9695/dd30wo5-31a51213-6a7b-424f-89ad-cf4484a1f464.jpg/v1/fill/w_375,h_250,q_70,strp/freshwater_mermaid_x_by_megancoffey_dd30wo5-250t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9ODU0IiwicGF0aCI6IlwvZlwvMmU1YjRkNzItZmM0ZC00ZDBmLTk0MDEtYTQ0MGQ5OGY5Njk1XC9kZDMwd281LTMxYTUxMjEzLTZhN2ItNDI0Zi04OWFkLWNmNDQ4NGExZjQ2NC5qcGciLCJ3aWR0aCI6Ijw9MTI4MCJ9XV0sImF1ZCI6WyJ1cm46c2VydmljZTppbWFnZS5vcGVyYXRpb25zIl19.dQB3yr28uyuhtSbc3br3NpD_PHPkH-prbmVKWaeDkgI"/> <span class="saved-faved-corner" data-sigil="saved-faved-corner"></span>
</a>
<a class="torpedo-thumb-link" href="https://www.deviantart.com/megancoffey/art/Freshwater-Mermaid-IX-791141456"><img alt="Freshwater Mermaid IX by MeganCoffey" data-sigil="torpedo-img" src="https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/2e5b4d72-fc4d-4d0f-9401-a440d98f9695/dd30wnk-d7e440d7-f716-4634-83f6-8b2850a3bfee.jpg/v1/crop/w_188,h_250,x_0,y_0,scl_0.047,q_70,strp/freshwater_mermaid_ix_by_megancoffey_dd30wnk-250t.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7ImhlaWdodCI6Ijw9MTcwNyIsInBhdGgiOiJcL2ZcLzJlNWI0ZDcyLWZjNGQtNGQwZi05NDAxLWE0NDBkOThmOTY5NVwvZGQzMHduay1kN2U0NDBkNy1mNzE2LTQ2MzQtODNmNi04YjI4NTBhM2JmZWUuanBnIiwid2lkdGgiOiI8PTEyODAifV1dLCJhdWQiOlsidXJuOnNlcnZpY2U6aW1hZ2Uub3BlcmF0aW9ucyJdfQ.iufhVUDxdplAqKYw4Ci49JOPfH46_qpkLvnm6VrgszA"/> <span class="saved-faved-corner" data-sigil="saved-faved-corner"></span>
</a>


shisik 05-04-2019 13:09 2866707

Цитата:

Код:

text = open('l:/test/links.txt','r')  # Windows
mytxt = text.read()
print(mytxt)
mytxt.close()


Код:

with open('l:/test/links.txt', 'r') as mytxt:
    content = mytxt.read()
    print(content)


Bumbik 06-04-2019 14:02 2866838

text = open('l:/test/links.txt','r') # Windows
Вроде косая черта не в ту сторону
Код:

text = open(r'l:\test\links.txt', encoding='utf-8')  # Windows
mytxt = text.read()
text.close()
print(mytxt)

encoding лучше прописывать
Код:

with open(r'l:\test\links.txt', 'r') as mytxt:
    content = mytxt.read()
    print(content)


shisik 06-04-2019 14:05 2866839

Да, с вендой уже много лет не работаю, может и не будет работать с прямым слешем. Не на чем проверить.

Bumbik 06-04-2019 14:14 2866842

странно, только что проверил на винде, работает с / и \, без ошибок, может из-за r перед строкой

shisik 06-04-2019 14:19 2866844

Цитата:

Цитата Bumbik
странно, только что проверил на винде, работает с / и \, без ошибок, может из-за r перед строкой »

Как ещё можно интерпретировать слеш в пути, кроме как разделитель?

Iska 06-04-2019 15:06 2866846

Цитата:

Цитата shisik
может и не будет работать с прямым слешем. »

Я так думаю, пока из Windows не выпилят подсистему POSIX — будет.

Цитата:

Цитата shisik
Как ещё можно интерпретировать слеш в пути, кроме как разделитель? »

Как символ, недействительный для использования. В DOS и в Windows 1.x-9.x так и было, если мне не изменяет память. А в NT, выросшей из совместного с IBM проекта OS/2, было разрешено его использование в путях для совместимости (с какого момента — не помню, может быть и изначально).


Время: 14:03.

Время: 14:03.
© OSzone.net 2001-