Vinnaren i pepparkakshustävlingen!
  • 1
  • 2
2016-07-24, 23:43
  #1
Medlem
spuuunits avatar
Jag vill få fram alla länkar som finns på den här URL:en, egentligen alla länkar till bilderna. Tex denna länk: https://www.flickr.com/photos/visual...7622467976256/. Problemet är att den länken står ingenstans under "View Page Source" i Firefox. Utan man måste "Save Page As...", där i den HTML-filen man laddar ner står länken.

Jag har testat en massa olika metoder, men inget snappar upp alla länkar. Här är bla vad jag testat:

Kod:
using (WebClient client = new WebClient())
{
    string code = client.DownloadString("http://www.flickr.com/photos/visualechos/sets/72157622467976256");
}

Kod:
using (WebClient client = new WebClient())
{
    client.DownloadFile("http://www.flickr.com/photos/visualechos/sets/72157622467976256", @"C:\code.html");
}

Kod:
// Using HtmlAgilityPack
private List<string> LINK = new List<string>();
public void GetLinks(string url)
    {
        HtmlWeb hw = new HtmlWeb();
        HtmlAgilityPack.HtmlDocument doc = hw.Load(url);
        foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
        {
            LINK.Add(link.GetAttributeValue("href", "link not found"));
        }
    }
private void btnStoreLinks_Click(object sender, EventArgs e)
    {
        GetLinks("https://www.flickr.com/photos/visualechos/sets/72157622467976256");
    }
Citera
2016-07-25, 19:53
  #2
Medlem
spuuunits avatar
Några idéer?
Citera
2016-07-25, 20:09
  #3
Medlem
ChristianXs avatar
Citat:
Ursprungligen postat av spuuunit
Några idéer?
Du behöver rendera den först, och sedan parsa ut alla länkar (dvs allt som börjar på "http och fram till nästa ")

Kika på detta exemplet:
http://stackoverflow.com/questions/7...rowser-control
Citera
2016-07-25, 21:30
  #4
Medlem
Allings avatar
Citat:
Ursprungligen postat av spuuunit
Jag vill få fram alla länkar som finns på den här URL:en, egentligen alla länkar till bilderna. Tex denna länk: https://www.flickr.com/photos/visual...7622467976256/. Problemet är att den länken står ingenstans under "View Page Source" i Firefox. Utan man måste "Save Page As...", där i den HTML-filen man laddar ner står länken.
Det kanske inte är lösningen på ditt problem, men det kanske kan hjälpa dig på vägen att köra följande i webbläsarens konsol:

Kod:
Array.prototype.slice.call(document.links).reduce((acc, current) => `${acc}\n${current.href}`, "")

Jag får ut en ~180-raders sträng där varje rad är en URL; "photos/visualechos/14925188846/in/album-72157622467976256" är dock inte en substräng till den strängen:

__________________
Senast redigerad av Alling 2016-07-25 kl. 21:36.
Citera
2016-07-26, 10:54
  #5
Medlem
spuuunits avatar
Citat:
Ursprungligen postat av ChristianX
Du behöver rendera den först, och sedan parsa ut alla länkar (dvs allt som börjar på "http och fram till nästa ")

Kika på detta exemplet:
http://stackoverflow.com/questions/7...rowser-control

Jag testade att göra precis som den första lösningen, sen skrev jag ut allt i en .txt, men tex länken https://www.flickr.com/photos/visual...7622467976256/ fanns tyvärr inte med i texten.
Citera
2016-07-26, 11:02
  #6
Medlem
spuuunits avatar
Citat:
Ursprungligen postat av Alling
Det kanske inte är lösningen på ditt problem, men det kanske kan hjälpa dig på vägen att köra följande i webbläsarens konsol:

Kod:
Array.prototype.slice.call(document.links).reduce((acc, current) => `${acc}\n${current.href}`, "")

Jag får ut en ~180-raders sträng där varje rad är en URL; "photos/visualechos/14925188846/in/album-72157622467976256" är dock inte en substräng till den strängen:


Oj, du verkar ha hittat något! Jag förstår bara inte hur jag ska göra... Koden ger mig en massa error. Hur skrev du?
Citera
2016-07-26, 11:19
  #7
Medlem
Citat:
Ursprungligen postat av spuuunit
Jag testade att göra precis som den första lösningen, sen skrev jag ut allt i en .txt, men tex länken https://www.flickr.com/photos/visual...7622467976256/ fanns tyvärr inte med i texten.

Visserligen inte jättevanligt på bilder, men det är ju inte omöjligt att någon av de renderade länkarna leder till en "redirect" till ditt exempel.

Du kan t.ex kolla vad programmet wget med verbose och log till fil hittar.

Typ:
Kod:
wget -vSrl1 --spider -np -a log.fil <url>
Citera
2016-07-26, 15:24
  #8
Medlem
Nu undviker jag Windows och kan inget om C# eller NET. Men problemet är av en mer generisk natur.

Det är inte något trivialt problem att tolka en godtycklig URI. Den inbäddade (inre) länken kan innehålla samma kontrolltecken som den inbäddande (yttre) länken. Därför måste alla komponenter i en URI manglas med procent-kodning så att kontrolltecken försvinner. Och det är en rekursiv process så att om den inbäddade länken också bäddar in en länk, så behöver den senare manglas två gånger.

När man packar upp länken så letar man upp kontrolltecknen och bryter isär till komponenter. Sedan avkodar man komponenterna genom procent-dekodning. Och är en komponent en inbäddad länk så fortsätter man samma process rekursivt.

Det finns många färdiga bibliotek för att tolka URI:er, men det är långt ifrån alla som klarar att göra det här rätt.
Citera
2016-07-26, 18:32
  #9
Medlem
spuuunits avatar
Citat:
Ursprungligen postat av iconicatab
Visserligen inte jättevanligt på bilder, men det är ju inte omöjligt att någon av de renderade länkarna leder till en "redirect" till ditt exempel.

Du kan t.ex kolla vad programmet wget med verbose och log till fil hittar.

Typ:
Kod:
wget -vSrl1 --spider -np -a log.fil <url>

Installerade Wget, men förstår inte hur jag gör med det... Ligger en Program Files (x86)\GnuWin32\bin\sed.exe, men flashar bara kommandotolken jättesnabbt.
Citera
2016-07-26, 19:22
  #10
Medlem
Citat:
Ursprungligen postat av spuuunit
Installerade Wget, men förstår inte hur jag gör med det... Ligger en Program Files (x86)\GnuWin32\bin\sed.exe, men flashar bara kommandotolken jättesnabbt.

Ok, windows:
Du måste öppna kommandotolken(CMD) och skriva själv från tangentbordet (eller klistra in):
Kod:
cd "\Program Files (x86)\GnuWin32\"
md data
cd data
..\bin\wget -v -S -r -l 1 --spider -np -a flickr_log.txt https://www.flickr.com/photos/visualechos/sets/72157622467976256


EDIT: Du skriver sed.exe, vilket är ett annat "unix-program" i windowsversion, så jag undrar var wget hamnade? Får du felmeddelande på att wget "är ett okänt kommando" så kan du prova att i CMD skriva:
Kod:
cd \
dir wget* /S
__________________
Senast redigerad av iconicatab 2016-07-26 kl. 19:33. Anledning: sed.exe
Citera
2016-07-26, 20:23
  #11
Medlem
spuuunits avatar
Citat:
Ursprungligen postat av iconicatab
Ok, windows:
Du måste öppna kommandotolken(CMD) och skriva själv från tangentbordet (eller klistra in):
Kod:
cd "\Program Files (x86)\GnuWin32\"
md data
cd data
..\bin\wget -v -S -r -l 1 --spider -np -a flickr_log.txt https://www.flickr.com/photos/visualechos/sets/72157622467976256


EDIT: Du skriver sed.exe, vilket är ett annat "unix-program" i windowsversion, så jag undrar var wget hamnade? Får du felmeddelande på att wget "är ett okänt kommando" så kan du prova att i CMD skriva:
Kod:
cd \
dir wget* /S

Får det här i cmd. Laddade ner härifrån (Setup program).
Citera
2016-07-26, 21:12
  #12
Medlem
Citat:
Ursprungligen postat av spuuunit
Får det här i cmd. Laddade ner härifrån (Setup program).

okej - E-disken. Skriv:
Kod:
E:
cd \
dir wget* /S
cd "\Program Files (x86)\GnuWin32\"
md data
cd data
..\bin\wget -v -S -r -l 1 --spider -np -a flickr_log.txt https://www.flickr.com/photos/visualechos/sets/72157622467976256
Citera
  • 1
  • 2

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback