Web crawler - News bot - custom user agent string?


7 innlegg i emnet

Skrevet

Har de siste årene bygget opp en slags "news aggregator bot", denne har de to siste månedene blitt kraftig videreutviklet og jobber nå på en mye mer systematisk måte for å hente inn nyheter.

Hva bør user agent strengen inneholde?

Når jeg ser på andre bot-er sine strenger, varierer det veldig:

http://www.useragentstring.com/pages/Crawlerlist/

Noen få utvalgte:

NewsGator/2.5 (http://www.newsgator.com; Microsoft Windows NT 5.1.2600.0; .NET CLR 1.1.4322.2032)
NewsGator/2.0 Bot (http://www.newsgator.com)

Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
Googlebot/2.1 (+http://www.googlebot.com/bot.html)
Googlebot/2.1 (+http://www.google.com/bot.html)

htdig/3.1.6 (mathieu.peltier@inrialpes.fr)

ia_archiver/8.9 (Windows NT 3.1; en-US;)

IRLbot/2.0 (compatible; MSIE 6.0; http://irl.cs.tamu.edu/crawler)

Noen har lenker til hele nettsteder, noen med lenker til info om bot-en, andre med e-mail adresse, og noen kun med OS og språk...

Hovedsaklig, dette gjør bot-en(e) mine foreløpig dette:

  • Bot 1: RSS/Atom Feed aggregator

    Skanner utelukkende XML feeder.

  • Bot 2: Webpage indexer

    Skanner META data.

Aktiverte kl 01:00 i natt "Bot 2", etter en lengre test-periode, noe som ga "Bot 1" over 3 ganger så mye å gjøre.

Kan med andre ord si at jeg akkurat har speedet opp tempoet fra ca 20.000, til nå over 80.000 forespørsler per døgn.

Alt foreløpig fra 1 og samme IP, dog planer om å endre på dette i fremtiden.

Nettsider som skannes, er hovedsaklig skandinavisk-språklig.

Hvert eneste nettsted blir på forhånd manuelt visuelt inspisert, før de legges til i listene som bot-ene bruker.

Lurer også på pros/cons da jeg ikke ønsker å bli blokkert fra "google/bing"-only nettsteder.

Om f.eks. VG blokkerer meg, får det hovedsaklig kun konsekvenser for VG og nettsiden min sine besøkende, da de ikke lenger får lese VG sine nyheter, men derimot får lese alle VG sine konkurrenter sine nyheter. Alle parters interesser bør derfor være å ikke blokkere eller å bli blokkert.

User agenten jeg bruker pr idag på "Bot 1", er ganske anonym, dog kanskje litt for gammel, da versjonsnummerne bør oppdateres.

User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36

Oppsummering:

  • Bør jeg beholde en anonym user agent? eller bør jeg lage en ny?
  • Hva bør den evt. inneholde? (hva som er vanlig varierer)
  • Hvordan unngå å bli blokkert?
  • Er det andre ting jeg bør tenke på? wiki, henvendelser, robots.txt, etc?
0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

Strengt tatt så burde du ha en dedikert useragent til din bot,

men dette skaper desverre for mye problemer i vår verden, slik at du blir blokkert for mye.

(Det er ofte veldig mye arbeid å bli hvitlistet på sidene du er innom.)

Hvis du sjekker ut denne adressen, så vil den liste opp de ti siste useragent som besøkte siden.

Dette kan hjelpe deg for å komme forbi blokkeringer.

Hver 30min f.eks. kan du gå inn på siden og hente ut de ti siste useragents, for så å putte dem i en liste, og bruke en tilfeldig useragent fra denne listen for hvert oppslag boten din gjør.

(Bare husk å filtrer ut useragent fra roboter, da mange tester boten sin på denne siden.)

Jeg hadde selv store problemer med 'crawling', og da spesiellt pga google (de viser deg ofte ikke siden hvis din useragent ikke er fra en nettleser, altså de blokkerer alle roboter), men når jeg gikk over til å bruke tilfeldig useragent á la hva jeg beskrev ovenfor så så jeg lite til blokkeringer.

Når det gjelder å respektere robots.txt så er det så som så, du kan gjøre det, men du trenger strengt tatt ikke.

Men du bürde vise skjønn, og se an hvordan side det er, og om du føler for at det er etisk riktig eller ikke for den aktuelle siden.

NB. Ikke 'fake' andre roboter sin useragent, spesiellt de store som ofte er hvitelistet. Dette vil bare skape problemer.

1

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

Takk for gode tips :)

Istedet for å parse et HTML dokument for å skaffe UA-strengene til whatsmyuseragent.com, har jeg funnet en annen genial løsning.

En MySQL query som lagrer random utvalgte UA fra de besøkende på nettstedene mine.

Kun unike strenger lagres i databasen, trengs derfor minimalt med rader.

Alle UA-ene som inneholder enten *bot* eller *spider* blir dermed også svært lett å luke bort.

På denne måten kan jeg lagre typiske UA også for hvert språk, Norsk UA for norske nettsteder, svensk for svenske osv.

Ser enkelte (men langt fra alle) på whatsmyuseragent.com bruker en-US nemlig:

Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SGH-M919 Build/IMM76L) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30

Akkurat det med å bli blokkert fra et nettsted, har jeg fortsatt tilgode å oppleve, men nå når det totale antall forespørsler er 4 dobblet, tar jeg ingen sjanser. Løsningen med random "anonyme" UA er dessuten genial også på dette punktet. :)

robots.txt er jeg dog usikker på hvordan jeg skal implementere, rett og slett bare hvordan skal jeg lese den på best mulig måte (regler som gjelder kun for spesifikke bots osv).

Ser dog ikke på dette som noen nødvendighet enda, da jeg pr dags dato kun skanner forsidene, samt oversikt-sidene for de vanligste nyhets kategoriene (innenriks/utenriks/sport/etc) til hver enkelt nettavis. Skanner dessuten disse 1 (maks 2) ganger i måneden.

Det å skanne URL-en til hver enkelt nyhet (hentet inn via RSS/atom feed) tror jeg er ganske uaktuelt. Det er vel her bruken av robots.txt begynner å bli ganske kritisk.

Kanskje en eller annen tilfeldig stikkprøve en gang i fremtiden, men nei, kommer aldri til å bli aktuelt å skanne hver enkelt artikkel.

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet (endret)

Når jeg besøker denne tråden, sender Chrome denne HTTP requesten:

Remote Address:178.255.146.148:80
Request URL:http://itpro.no/supportforum/index.php?showtopic=82874
Request Method:GET
Status Code:200 OK
Request Headers:
GET /supportforum/index.php?showtopic=82874 HTTP/1.1
Host: itpro.no
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36
Referer: http://itpro.no/supportforum/index.php?app=core&module=search&do=viewNewContent&search_app=forums
Accept-Encoding: gzip, deflate, sdch
Accept-Language: nb,no;q=0.8,en;q=0.6,en-US;q=0.4,sv;q=0.2
Cookie: **********
Query String Parameters:
showtopic=82874
Response Headers:
HTTP/1.1 200 OK
Date: Tue, 30 Dec 2014 20:54:36 GMT
Server: Apache/2.2.14 (Ubuntu)
X-Powered-By: PHP/5.3.2-1ubuntu4.18
Set-Cookie: session_id=**********; path=/; domain=.itpro.no; httponly
Set-Cookie: modpids=deleted; expires=Mon, 30-Dec-2013 20:54:35 GMT; path=/; domain=.itpro.no
Cache-Control: no-cache, must-revalidate, max-age=0
Expires: Mon, 29 Dec 2014 20:54:36 GMT
Pragma: no-cache
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 22934
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html;charset=ISO-8859-1



Er det mer enn User Agent jeg uansett "bør" / "må" sende, fra robotene mine?

Eller formulert litt annerledes: Har det noe å si om jeg dropper de fleste av disse feltene?

Detekterer enkelte nettsider at HTTP headeren er mangelfull? kanskje slik at de blokkerer disse? evt. banner IP adressen, ved svært mange slike mangelfulle headere?

Link til liste over Request fields: http://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Requests

Lurer mest på hva som skjer om ikke disse sendes:

  • Connection: keep-alive
  • Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
  • Accept-Encoding: gzip, deflate, sdch
  • Accept-Language: nb,no;q=0.8,en;q=0.6,en-US;q=0.4,sv;q=0.2

Vet nettsider som www.ign.com redirecter deg inn på no.ign.com om du er norsk. Er dette slikt de finner ut ved å lese HTTP headeren, nærmere bestemt "Accept-Language"?

Til info, så ønsker jeg ikke å bli videresendt til en annen adresse bare fordi språket er satt feil.

Hvis det er relevant, bruker jeg en mix av både file_get_contents og curl_exec i php. Burde jeg kanskje holde meg til cURL ??

EDIT: Kommer til å konvertere til cURL alle steder hvor jeg nå bruker file_get_contents.

Endret av jpg
0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

Hei!

Jeg har selv laget en enkel RSS-leser. Den kjører jeg automatisk hver kveld rundt klokken 22:31 og den går innom 6 nettaviser, hvorav den siste 3 forsjellige rss-sider. I tillegg kan jeg kjøre den manuelt om det ønskes.

Jeg sender følgende User-Agent Strings (for rss.xml fil):

GET /rss.xml HTTP/1.0
HOST: www.domain.tld
User-Agent: Custom Rss-reader by ZnarreZ@...... (Windows NT 5.1; U; nb)
Connection: close
$crlf

Unntaket er siste siden, hvor jeg skal hente /rss/nyheter og /rss/data og bruker

GET /rss/nyheter/ HTTP/1.0
HOST: www.domain2.tld
User-Agent: Custom Rss-reader by ZnarreZ@...... (Windows NT 5.1; U; nb)
Connection: keep-alive
$crlf
GET /rss/data HTTP/1.0
HOST: www.domain2.tld
Connection: close
$crlf

$crlf er dobbel blankt linjeskift, og epost-adressen min valgte jeg i eksempelet å ta vekk for unngå unødvendig indeksering av den hos spamboter som ikke akkurat respekterer robot.txt filer ;)

Grunnen til jeg bruker Connection: close er at webserveren automatisk lukker forbindelsen når all dataen er overført. Når jeg i andre eksempel skal hente to sider fra samme webserver, opprettholder jeg forbindelsen med Connection: keep-alive og ber om side 2 før jeg ber den lukke forbindelsen når jeg har mottatt det den eventuelt har å sende (med siste Connection: close). Under noen tester, så erfarte jeg at de fleste nettsider lukket forbindelsen med en gang dataen var overført, men noen sider holdt forbindelsen åpen i lengre enn et minutt før den lukket seg automatisk.

Jeg brukte HTTP/1.1 bak GET og andre verdier, men fikk da noen ganger noen merklige og ikke minst tilfeldige utf8 koder som jeg ikke klarte helt å håndtere, og derfor bruker jeg konsekvent HTTP/1.0 så lenge det virker. Jeg har ikke sett det nødvendig for min del å opplyse om hvilken encode, innholdstype eller språk jeg håndterer og de nyhetssidene jeg bruker, protesterer heller ikke ennå. Jeg ville kanskje vurdert å lagt til Accept: text/html.

Personlig tror jeg at hadde jeg drevet som administrator på større nettsteder, ville jeg satt mer pris på custom user-agents som ofte stakk innom, enn om en IP var mistenklig ofte innom med forskjellige user-agents. Det kunne kanskje trigget min nysgerrighet såppass at jeg ville intressert meg for å sende en mail til eieren av den for å høre om hva dette er, eventuelt besøkt nettstedet de opplyser hva de samler inn for å finne ut mer om besøkene.

-ZnarreZ-

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

Takk for nyttig innspill :)

Da jeg opprettet tråden var planen å lage egen User Agent, men pga Deni har erfaringer med å bli blokkert, falt valget på en random User Agent.

Skal ikke se bort fra at jeg hovedsaklig kommer til å bruke "min egen UA-string", men at hvis jeg blir blokkert, så bruker jeg random user agenter for å få tilgang hos de det gjelder.

Er kanskje en dårlig ting å gjøre det slik, men kan ihvertfall si at det ikke er en bad-bot, og her er hvorfor:

Har lagt ned mye arbeid i at de skal indexere på faste intervaller, som individuelt blir kalkulert ut fra antall nyheter publisert siste 30 dager. Minste grense på intervallet har jeg også. Dessuten som nevnt i et tidligere innlegg, alle domener/nettaviser blir manuelt sjekket før de (manuelt) legges til i scanne listene til bot-ene.

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

De to bot-ene mine fikk for noen minutter siden tildelt custom UserAgent-er for aller første gang.

Siden jeg driver 6 forskjellige nettsteder (4 under utvikling), på samme back-end kildekode og server, har de fått litt forskjellige strenger, for å matche nettstedene de representerer.

Dette selv om all trafikk fra de 2 bot-ene foreløpig går gjennom 1 felles IP adresse.

# XML feeds:
VIPnytt-NO-News-FeedFetcher/2.0; (+http://vipnytt.no/bot.html)
VIPnytt-SE-News-FeedFetcher/2.0; (+http://vipnytt.se/bot.html)
( +2 til )

# HTML META:
Mozilla/5.0 (compatible; VIPnytt-NO-News-bot/2.0; +http://vipnytt.no/bot.html)
Mozilla/5.0 (compatible; VIPnytt-SE-News-bot/2.0; +http://vipnytt.se/bot.html)
( +2 til )
 

I tillegg kommer 2 stk internasjonale nettsteder, under helt andre navn. Disse fikk tilsvarende UA, men da selvfølgelig uten språk tag.

URL-en som lenkes til, er foreløpig ikke aktiv, men er ment som en beskrivelse av hva bot-ene gjør, og hvilket formål de har. Mail adresse vil også bli oppført her.

Åpen for forslag til endringer i UserAgent-ene, hvis det er noe jeg burde legge til eller endre.

Lurer nå på 2 ting:

  • robots.txt Noen som har erfaringer med å parse denne?

    Er dette et godt utgangspunkt? http://www.the-art-of-web.com/php/parse-robots/

  • Svartelisting Finnes det noe ala en "recommended black-list" over bot-er?

    Greit å finne ut om en er oppført i en slik liste, før også IP adressen blir svartelistet.

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!


Start en konto

Logg inn

Har du allerede en konto? Logg inn her.


Logg inn nå

  • Hvem er aktive   0 medlemmer

    Ingen innloggede medlemmer aktive