Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  22 4243
Har en nettside jeg skulle ha lastet ned alle pdf er fra. de har vær sin egen url eksempel "https://nettside.no/a/1" og neste er på url som slutter på 2 og sånn fortsetter det. noen som vet om løsning?
kan være snakk om flere milioner pfder
Trigonoceps occipita
vidarlo's Avatar
Donor

Kode

for fname in $(seq 1 1000000)
 do
  wget https://nettside.no/a/$fname -O $fname.pdf
done
Oppgava kan løysast i eit vilkårleg programmeringsspråk. Over? Bash.
Sist endret av vidarlo; 20. juni 2022 kl. 14:23.
Spesiell
Sterol91's Avatar
Trådstarter
Skjønner det. men er kanskje ett problem og hente ut så mye data. regna på det og fant ut av det blir over 430TB
fordelt over 350000000 sider. Kan ikke si noe om hvor det skal hentes fra for enten så skulle det ikke vært tilgjengelig eller så kan man tjene penger på det hvis man får bruke dataen.
Du kan jo alltids bare pipe det inn til AWS S3 eller noe om lagringsplass er et problem.
There is no such thing as a free lunch? Du kan vel starte med 1TB, loopen vil stoppe av seg selv når disken er full. Det er ikke farlig.

BTW, det er ikke noe nytt at alle bøker etc ligger gratis ute på nett, er ikke noe du kan tjene penger på. Dessuten, dersom det er så mye informasjon, ligger verdien i å organisere den og gjøre den søkbar og lett tilgjengelig for andre, ikke i selve pdf-en. Eneste jeg kan tenke på som gjør 430TB med pdf verdifullt er hvis det er hemmelig og/eller ulovlig. Tror ikke du vil rote deg oppi det, særlig hvis du ikke vet hva du holder på med.
Spesiell
Sterol91's Avatar
Trådstarter
Sitat av Chronic420 Vis innlegg
There is no such thing as a free lunch? Du kan vel starte med 1TB, loopen vil stoppe av seg selv når disken er full. Det er ikke farlig.

BTW, det er ikke noe nytt at alle bøker etc ligger gratis ute på nett, er ikke noe du kan tjene penger på. Dessuten, dersom det er så mye informasjon, ligger verdien i å organisere den og gjøre den søkbar og lett tilgjengelig for andre, ikke i selve pdf-en. Eneste jeg kan tenke på som gjør 430TB med pdf verdifullt er hvis det er hemmelig og/eller ulovlig. Tror ikke du vil rote deg oppi det, særlig hvis du ikke vet hva du holder på med.
Vis hele sitatet...
Dette er ikke bøker. Jeg har google i dagevis for og finne noe / noen som har gjort dette og det nevnes ikke en plass unntatt på en link på google og det er der jeg tapper info fra.

For og forklare litt mer så er det målet og gjøre det søkbart noe som det ikke er akkurat nå. og de som sitter på dataen holder den bare for staten.
BRAND ∞ STRONG
Sitat av Sterol91 Vis innlegg
For og forklare litt mer så er det målet og gjøre det søkbart noe som det ikke er akkurat nå. og de som sitter på dataen holder den bare for staten.
Vis hele sitatet...
Hvis dette ikke er søkbart og bare blir holdt, betyr det at det normalt ikke er noe særlig trafikk der?
Og i så fall vil ikke en plutselig nedlastning av 430TB bli veldig synlig?

Kode

import requests

for i in range(1_000):
    url = f'https://eksempel.org/{i}.pdf'
    pdf = requests.get(url, stream=False)
    with open(f'{i}.pdf', 'wb') as f:
        f.write(pdf.content)
Høres ut som et artig prosjekt. Sjekk ut eksisterende arkiveringsprosjekt her: https://wiki.archiveteam.org/index.php/Main_Page

Dette er en haug med folk som frivillig bidrar med diskplass og båndbredde i lignende situasjoner. Om greien din blir for snever og uinteressant kan du i det minste finne eksisterende kode og programmer, eller noen norske som henger i dette miljøet og er villig til å bidra.

Skal du lagre all dataen selv på servere hjemme? Betale regningen for cloud? Bruke dedikerte servere fra OVH/Hetzner? Hvor mye er du villig til å betale? Er det lovlig å laste ned alt dette? Om det er lovlig, kommer noen til å stoppe deg likevel? Er det lov å dele dataene om du får tak i dem?
Spesiell
Sterol91's Avatar
Trådstarter
Sitat av Ozma Vis innlegg
Høres ut som et artig prosjekt. Sjekk ut eksisterende arkiveringsprosjekt her: https://wiki.archiveteam.org/index.php/Main_Page

Dette er en haug med folk som frivillig bidrar med diskplass og båndbredde i lignende situasjoner. Om greien din blir for snever og uinteressant kan du i det minste finne eksisterende kode og programmer, eller noen norske som henger i dette miljøet og er villig til å bidra.

Skal du lagre all dataen selv på servere hjemme? Betale regningen for cloud? Bruke dedikerte servere fra OVH/Hetzner? Hvor mye er du villig til å betale? Er det lovlig å laste ned alt dette? Om det er lovlig, kommer noen til å stoppe deg likevel? Er det lov å dele dataene om du får tak i dem?
Vis hele sitatet...
Foreløpig lagrer jeg alt selv, av 50000 pdf.er var 4274stk noe og spare på så blir ikke så mye data som jeg ført anslo, de fleste er tomme.

Om de er lovlig og laste ned aner jeg ikke ligger åpent tilgjengelig vært fall, ikke bak noen mor eller innlogging

Aner ikke om det er lov og dele heller, men x statlig instans gir deg link hvis du logger inn. men bare ang deg.
God mengde data det der. Kan anbefale Hetzner for billig hardware. https://www.hetzner.com/sb?hdd_from=9500&hdd_to=17000.

Mye RAM og greie CPUer på de her så da kan du kanskje slippe unna med prosessering på samme maskinen og.
Du kan jo eventuelt legge inn sjekker i scriptet etter at hver pdf er lastet ned, helt sikkert mulig å legge inn funksjonalitet som i relativt stor grad kan sjekke om pdf'en skal forkastes eller ikke. Bruker du python så er det relativt enkelt å lese pdf filer, eventuelt så er en enkel halveis-løsningen å forkaste/beholde pdf'ene basert på filstørrelse.

Er litt nysgjerrig på hva slags type innhold disse filene har, i og med at du tar deg bryet
Spesiell
Sterol91's Avatar
Trådstarter
Sitat av stepry Vis innlegg
Du kan jo eventuelt legge inn sjekker i scriptet etter at hver pdf er lastet ned, helt sikkert mulig å legge inn funksjonalitet som i relativt stor grad kan sjekke om pdf'en skal forkastes eller ikke. Bruker du python så er det relativt enkelt å lese pdf filer, eventuelt så er en enkel halveis-løsningen å forkaste/beholde pdf'ene basert på filstørrelse.

Er litt nysgjerrig på hva slags type innhold disse filene har, i og med at du tar deg bryet
Vis hele sitatet...
Akkurat nå sorterer jeg etter størrelse, de som er tomme er en gitt størrelse og de som har info er forskjellig størrelse.

Er sånn sirka 1/300 av ferdig men probelme er jo att dette er data som legges til vær dag og da kan det brukes nummes som tidligere var ubrukt..
Sitat av Sterol91 Vis innlegg
Er sånn sirka 1/300 av ferdig men probelme er jo att dette er data som legges til vær dag og da kan det brukes nummes som tidligere var ubrukt..
Vis hele sitatet...
Det du kan gjøre er at du outputter alle filnavn du allerede har prosessert til en tekstfil, så gjør du en sjekk mot denne tekstfilen i loopen for å avgjøre om du skal laste ned eller ikke. Da slipper du å hente ned samme fil flere ganger
Sitat av Sterol91 Vis innlegg
Om de er lovlig og laste ned aner jeg ikke ligger åpent tilgjengelig vært fall, ikke bak noen mor eller innlogging
Vis hele sitatet...
At noe mangler tilgangskontroll er ikke ensbetydende med at det er "åpent tilgjengelig". Hvis en nettside linker til "nettside.com/internefiler/1337.pdf" og du gjetter at det kanskje også finnes en 1338.pdf der, så betyr ikke det at du har lov å laste ned denne. Hvis det ikke er noen lenker til 1338.pdf, men du laster ned denne, og eierne av nettside.com finner ut av det, så tilsier rettspraksis at du kan havne i trøbbel. Så blir det opp til deg å overbevise en boomer-dommer, som tror at Internett og Google er samme greia, om at IDOR ikke er det samme som hacking.

Hvis disse filene genererer mye trafikk for nettsiden, så vil det bli oppdaget når de får regningen for det, og da vil jeg håpe at du har brukt VPN hele veien.
Sist endret av Dyret; 21. juni 2022 kl. 23:10.
Spesiell
Sterol91's Avatar
Trådstarter
Sitat av Dyret Vis innlegg
At noe mangler tilgangskontroll er ikke ensbetydende med at det er "åpent tilgjengelig". Hvis en nettside linker til "nettside.com/internefiler/1337.pdf" og du gjetter at det kanskje også finnes en 1338.pdf der, så betyr ikke det at du har lov å laste ned denne. Hvis det ikke er noen lenker til 1338.pdf, men du laster ned denne, og eierne av nettside.com finner ut av det, så tilsier rettspraksis at du kan havne i trøbbel. Så blir det opp til deg å overbevise en boomer-dommer, som tror at Internett og Google er samme greia, om at IDOR ikke er det samme som hacking.

Hvis disse filene genererer mye trafikk for nettsiden, så vil det bli oppdaget når de får regningen for det, og da vil jeg håpe at du har brukt VPN hele veien.
Vis hele sitatet...
En fil er 140kb til 170kb. Alle disse linkes til hvis man er innlogget og har tilgang. Men jeg startet med og laste ned fra 1 og gjetter ikke. All data lagres kun lokalt hos meg så kan på ingen måte se jeg bryter noen lov, så lenge jeg ikke deler det videre. Men det ligger jo tilgjengelig for alle i verden med ett par søk på google.
Kan vel kanskje sammenlignes litt med han som ble anmeldt for å "hacke" vegvesenet: https://www.kode24.no/kodenytt/ny-ve...-data/73018633, der endte det med frifinnelse.
▼ ... over en måned senere ... ▼
Spesiell
Sterol91's Avatar
Trådstarter
Holder fortsatt på med dette tar ned rundt 100.000 pdf'er per dag men hvis noen vil være med og som kan lage noe som laster ned fortere enn det jeg bruker ta kontakt på pm

Slik som det er satt opp nå laster jeg ned med en rate på ca 700KiB/s
Sist endret av Sterol91; 26. juli 2022 kl. 22:02.
m0b
m0b's Avatar
DonorAdministrator
Antar at årsaken til det er at du laster ned sekvensielt, og dermed må vente på at én fil blir ferdig før den starter med neste. Det du trenger er å i hva enn slags språk du bruker for å automatisere, implementere threading eller asynkrone metoder som lar deg kjøre flere nedlastinger om gangen.
Sist endret av m0b; 27. juli 2022 kl. 21:52.
Spesiell
Sterol91's Avatar
Trådstarter
jeg har til nå brukt HTTrack og tatt 50.000pdfer om gangen så langt fra opptimalt
Sitat av Sterol91 Vis innlegg
For og forklare litt mer så er det målet og gjøre det søkbart noe som det ikke er akkurat nå. og de som sitter på dataen holder den bare for staten.
Vis hele sitatet...
Har du noen plan for hvordan du skal gjøre dataene søkbare? Det er ikke trivielt å gjøre mengdene du snakker om søkbart. Med mindre du også laster ned metadata som gjør det trivielt, så klart.
▼ ... mange måneder senere ... ▼
Denne skal holde styr på hvilke filer som har blitt lastet ned, samt sjekke om de er tomme eller ei. Hvis du kjører koden en annen dag, vil den fortsette hvor den slapp. Den kjører også 100 threads samtidig, så 100 filer samtidig. Kan være servereier får DDOS advarsel pga. av det, men det får du justere selv.

Kode

import requests
import sqlite3
import os
import PyPDF2
from io import BytesIO
from concurrent.futures import ThreadPoolExecutor, as_completed

# Function to download a single PDF
def download_pdf(i):
    url = f'https://eksempel.org/{i}.pdf'
    
    # Check if the PDF has already been downloaded
    c.execute("SELECT * FROM pdfs WHERE id=?", (i,))
    data = c.fetchone()
    if data is not None and data[1] == 1:
        print(f"Skipping {url}, already downloaded.")
        return

    # Download the PDF
    response = requests.get(url, stream=True)
    if response.status_code == 404:
        print(f"{url} not found.")
        return

    # Check if the PDF is not empty
    file = BytesIO(response.content)
    try:
        reader = PyPDF2.PdfFileReader(file)
        if reader.getNumPages() == 0:
            print(f"Skipping {url}, empty file.")
            return
    except PyPDF2.utils.PdfReadError:
        print(f"Skipping {url}, not a valid PDF.")
        return

    # Save the PDF
    with open(f'{i}.pdf', 'wb') as f:
        f.write(response.content)

    # Record the PDF as downloaded
    c.execute("INSERT OR IGNORE INTO pdfs VALUES (?, ?, ?)", (i, url, 1))
    conn.commit()

# Connect to SQLite3 database, create if not exists
conn = sqlite3.connect('pdfs.db')
c = conn.cursor()

# Create table if not exists
c.execute('''
    CREATE TABLE IF NOT EXISTS pdfs
    (id INTEGER PRIMARY KEY, url TEXT, downloaded INTEGER)
''')

# Find the maximum id in the database, and start from there.
# If the database is empty, start from 1.
c.execute("SELECT MAX(id) FROM pdfs")
result = c.fetchone()
start = 1 if result[0] is None else result[0] + 1

# Use ThreadPoolExecutor to download multiple PDFs at the same time
with ThreadPoolExecutor(max_workers=100) as executor:
    futures = {executor.submit(download_pdf, i) for i in range(start, start+1000)}
    for future in as_completed(futures):
        future.result()  # to raise exceptions if any

# Close the database connection
conn.close()
Hvor langt er du kommet nå?