русский
Germany.ruForen → Архив Досок→ Programmierung

Выборка из списка на питоне (юпитер ноутбук)

641  
7495 знакомое лицо28.01.22 02:37
7495
28.01.22 02:37 

Объясняю задачку. Имеем список адресов input.txt - нужно через страницу выбрать только рабочие адреса.


Для этого, берем первый стринг из списка, подставляем в адрес, грузим страницу, парсим на наличие класса "search-result-list", если на странице отсутствует - цикл продолжается, если есть - записываем этот адрес в output.txt и так проходим весь список.


Желательно конечно влепить рандомную задержку как в этом примере: ютуб, скрипт к видео.


Пример списка input.txt:

0x0000000012300000000000000000000000000000

0x0000000001230000000000000000000000000000

0x0000000000012300000000000000000000000000

0x0000000000001230000000000000000000000000

0x0000000000000123000000000000000000000000

0x0000000000000012300000000000000000000000

0x0000000000000000000000000000000000000000

0x0000000000000000012300000000000000000000

0x0000000000000000001230000000000000000000

0x0000000000000000000000000000000000000001


(седьмой и десятый адрес должен записаться в список)


тут ещё больше примеров от индуса: ютуб


import requests
import bs4
from bs4 import BeautifulSoup

url = 'https://blockscan.com/address/0x0123000000000000000000000000000000000000'
headers = { 'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36" }

data = requests.get(url)
print(data.text)

Fragen und Antworten - Программируем калькулятор пособий для беженцев вместе.
#1 
NightWatch коренной житель28.01.22 19:07
NightWatch
NEW 28.01.22 19:07 
in Antwort 7495 28.01.22 02:37, Zuletzt geändert 28.01.22 19:13 (NightWatch)
import requests
import urllib.parse
from bs4 import BeautifulSoup
import os

INPUT_FILE = "input.txt"
OUTPUT_FILE = "output.txt"
MIN_DELAY = 1
MAX_DELAY = 5
URL_TEMPLATE = 'https://blockscan.com/address/{address}'
HEADERS = {'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36"}

def writeToFile(address):
    with open(OUTPUT_FILE, 'a') as file:
        file.write(address)

def checkAddress(address):
    print(address)
    url = URL_TEMPLATE.format(address=urllib.parse.quote(address))
    print(url)
    r = requests.get(url, headers=HEADERS)
    r.raise_for_status()
    soup = BeautifulSoup(r.text, 'html.parser')
    if soup.find(class_="search-result-list") is not None :
        writeToFile(address + os.linesep)


if __name__ == '__main__':
    with open(INPUT_FILE) as file:
        addresses = file.readlines()

    for address in addresses:
        time.sleep(MIN_DELAY + random.random() * (MAX_DELAY - MIN_DELAY))
        checkAddress(address.rstrip())
#2 
7495 знакомое лицо29.01.22 06:45
7495
NEW 29.01.22 06:45 
in Antwort NightWatch 28.01.22 19:07

Тесты делали тоже в юпитере?

Если использовать Вашу программу сейчас без исправлений - то юпитер ругается, сначала одно, потом другое:

NameError: name 'time' is not defined
NameError: name 'random' is not defined

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


я добавил пару библиотек и пару убрал:

import requests
import urllib.parse
from bs4 import BeautifulSoup
import time
import random


убрал io и os добавил time и random


поменял строку

writeToFile(address + os.linesep) # вставляет пустую строку разделитель

на строку

writeToFile(address + "\n") # новая строка, более компактно


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

Fragen und Antworten - Программируем калькулятор пособий для беженцев вместе.
#3