Random выдает ошибку

serot

Новичок
Пользователь
Май 13, 2020
7
0
1
Всем привет!
Пытаюсь найти артикулы input1.txt в базе на 1000 страниц. Страницы перебираю рандомом.
Подскажите в чем может быть проблема. Модуль random выдает ошибку.
Python:
import requests
import random

filenames_ = 'input1.txt'

def run():
    try:
        while 5 > 1:
            browser = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) ' +\
                'AppleWebKit/537.36 (KHTML, like Gecko) ' +\
                'Chrome/71.0.3578.98 Safari/537.36'
            headers = {'User-Agent': browser}
            pageNum = random.randrange(1,1000)
            fullurl = 'http://localhost/'+str(pageNum)

            for url in fullurl:
                html = requests.get(url=url, headers=headers).text
                for filename in filenames:
                    with open(filename) as f:
                        for line in f:
                            if line.rstrip() in html:
                                print(f'Нашёл строку "{line}" на странице {url}')


    except:
        run()
        
run()
 

Vlad_SD

Активный пользователь
Пользователь
Апр 7, 2020
91
45
18
Здравствуйте, прикрепите к коду сообщение об ошибке. Ссылка формируется вроде правильно.
 

serot

Новичок
Пользователь
Май 13, 2020
7
0
1
error.JPG
 

serot

Новичок
Пользователь
Май 13, 2020
7
0
1
Изначально было так:

Python:
import requests


urls_ = ['http://localhost/1', 'http://localhost/2']
filenames_ = ['input1.txt', 'input2.txt']
 
 
def func(urls, filenames):
    browser = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) ' +\
        'AppleWebKit/537.36 (KHTML, like Gecko) ' +\
        'Chrome/71.0.3578.98 Safari/537.36'
    headers = {'User-Agent': browser}
    for url in urls:
        html = requests.get(url=url, headers=headers).text
        for filename in filenames:
            with open(filename) as f:
                for line in f:
                    if line.rstrip() in html:
                        print(f'Нашёл строку "{line}" на странице {url}')
                        return
                        
func(urls_, filenames_)

Чтобы не вписывать страницы вручную (т.к. их 1000), решил дописать, чтобы страницы перебирались через Random.
 

root

Пользователь
Пользователь
Апр 29, 2020
60
14
8
Москва
Ничего зашкварнее рандома придумать не мог? :с
 

Xagler

Новичок
Пользователь
Май 13, 2020
13
3
3
почему бы просто не перебрать их по порядку?
Python:
f.open('your_file.txt')
for line in f.readlines():
    line = line.rstrip() # избавляемся от \n
    # твой код
 
  • Мне нравится
Реакции: root

serot

Новичок
Пользователь
Май 13, 2020
7
0
1
Ничего зашкварнее рандома придумать не мог? :с
Есть идеи как такой объем обработать?

почему бы просто не перебрать их по порядку?
Слишком большой объем данных, артикулов в txt фале около 500 и страниц в базе 1000.
 

Xagler

Новичок
Пользователь
Май 13, 2020
13
3
3
Есть идеи как такой объем обработать?


Слишком большой объем данных, артикулов в txt фале около 500 и страниц в базе 1000.
не слишком то это и много, но хозяин барин)
 

MaksimD

Пользователь
Пользователь
Май 12, 2020
51
11
8

Чел, да у тебя тупо память закончилась и стек переполнился. У тебя в коде в блоке try зацыкливается на функцию run() - так не пишут. Сделай так:
Код:
    except (ValueError):
        print("Что-то пошло не так..")
 

MaksimD

Пользователь
Пользователь
Май 12, 2020
51
11
8
def run(): try: while 5 > 1:
и переделай while на что-то такое:
while i >1:
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Всем привет!
Пытаюсь найти артикулы input1.txt в базе на 1000 страниц. Страницы перебираю рандомом.
Подскажите в чем может быть проблема. Модуль random выдает ошибку.
Вам уже подсказали что ошибка происходит из-за переполнения стека. Попробуйте просто перебирать файлы в цикле и искать по ним последовательно. Вот пример:
Python:
import requests


def run(filename):
    lines = []
    # чтобы не открывать файл много раз
    with open(filename, 'r', encoding='utf-8') as f:
        # записываем его в список lines
        lines = list(f)

    browser = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) ' +\
                'AppleWebKit/537.36 (KHTML, like Gecko) ' +\
                'Chrome/71.0.3578.98 Safari/537.36'
    headers = {'User-Agent': browser}

    for i in range(1, 1000):
        url = 'http://localhost/' + str(i)
        try:
            html = requests.get(url=url, headers=headers).text
        except:
            print(f'Ошибка на странице {url}')
        else:
            for line in lines:
                if line.strip() in html:
                    print(f'Нашёл строку "{line}" на странице {url}')
    
    
filenames = 'input1.txt'

for filename in filenames:
    run(filename)
 

serot

Новичок
Пользователь
Май 13, 2020
7
0
1
Вам уже подсказали что ошибка происходит из-за переполнения стека. Попробуйте просто перебирать файлы в цикле и искать по ним последовательно. Вот пример:
Выдает ошибку:
error1.JPG
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Эту строку
filenames = 'input1.txt'
нужно заменить на такую
filenames =['input1.txt']
Вместо списка строку написал по ошибке.
 

root

Пользователь
Пользователь
Апр 29, 2020
60
14
8
Москва
Слишком большой объем данных, артикулов в txt фале около 500 и страниц в базе 1000.
Шутишь так? У тебя гораздо больше времени уйдет на всякие рандомы, чем на простой перебор. Да и не много это, в один поток справишься)
 

serot

Новичок
Пользователь
Май 13, 2020
7
0
1
Шутишь так? У тебя гораздо больше времени уйдет на всякие рандомы, чем на простой перебор. Да и не много это, в один поток справишься)
А как добавить несколько потоков?
 

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