Topics geautomatiseerd uitlezen en de cookie wall

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • technorabilia
  • Registratie: November 2006
  • Laatst online: 15-09 14:44
Afgesplitst van Cookies op Tweakers.net.

Ik wilde wat data uitlezen uit dit topic en zodoende periodiek een lijstje maken. Het valt mij alleen nog tegen om de cookies netjes te accepteren.

Ik kwam dit topic tegen en dacht dat het wel toepasselijk was om hier mijn vraag te posten.

De volledige code zal ik hier maar achterwege laten, maar wat geef ik mee aan https://tweakers.net/my.tnet/cookies/? Hoe bepaal ik bijvoorbeeld een tweakers_token?

Python:
1
2
3
4
5
6
data = {
    'decision': 'accept',
    'returnTo': 'YThjZWEzOWJhOGM4MjkzMTI3Y2VmY2QzZWFjNGRhYTg2ZjA2MmUxNA|https://www.tweakers.net',
    'fragment': '',
    'tweakers_token': '45yAotWaYLZ7+ksy0aqXrqAI/BLQhBTM1GttQRU0'
}

Cookies __Secure-TnetID en een reeks SS* cookies worden gezet, maar ik blijf na het accepteren van de cookies steeds maar de vraag houden of ik cookies wil accepteren. Waar wordt mijn keuze opgeslagen? :?

Wat mis ik?

[ Voor 3% gewijzigd door Dirk op 02-06-2021 00:09 ]

👉🏻 Blog 👈🏻


Acties:
  • 0 Henk 'm!

  • Dirk
  • Registratie: November 2004
  • Laatst online: 01:22

Dirk

Coördinator frontpagemoderatie
Kun je via rss niet krijgen wat je nodig hebt? Dat heeft geen cookie wall.

All statements are true in some sense, false in some sense, meaningless in some sense, true and false in some sense, true and meaningless in some sense, false and meaningless in some sense, and true and false and meaningless in some sense.


Acties:
  • 0 Henk 'm!

  • technorabilia
  • Registratie: November 2006
  • Laatst online: 15-09 14:44
@Dirk
Aha, daar kan ik wel iets mee! Bedankt voor je reactie. (y)

👉🏻 Blog 👈🏻


Acties:
  • 0 Henk 'm!

  • technorabilia
  • Registratie: November 2006
  • Laatst online: 15-09 14:44
Dirk schreef op dinsdag 1 juni 2021 @ 21:46:
Kun je via rss niet krijgen wat je nodig hebt? Dat heeft geen cookie wall.
Bij nader inzien denk ik niet dat dit werkt.

Als ik namelijk naar het betreffende topic kijk dan zie ik daar meer dan 100 posts.
De bijbehorende rss feed toont altijd maximaal 100 posts in omgekeerde volgorde vanaf de laatste post.

Misschien heeft iemand nog input en/of een alternatief om de inhoud van het gehele topic op te lepelen?

Edit:
Of natuurlijk een antwoord op mijn oorspronkelijke vraag om het topic niet te kapen en geheel ff-topic te gaan.

[ Voor 13% gewijzigd door technorabilia op 01-06-2021 23:45 ]

👉🏻 Blog 👈🏻


Acties:
  • +1 Henk 'm!

  • Dirk
  • Registratie: November 2004
  • Laatst online: 01:22

Dirk

Coördinator frontpagemoderatie
Hier een nieuw topic van maken is simpel zat, dus dat zal ik zo even doen, kan ik de vraag direct bij de devvers droppen. :)

Verder was mijn eerste idee om paginering toe te passen bij de rss, maar blijkbaar werkt dat niet meer.

Mijn tweede idee werkt wel, maar beperkt: https://gathering.tweaker...essages/2040642?limit=999. Dit hoogt het aantal reacties per pagina op 999, en hoger gaat die niet voor zover ik weet.

Misschien dat de devvers nog een beter idee hebben, dus ik drop het topic even in Mooie Features. :)

All statements are true in some sense, false in some sense, meaningless in some sense, true and false in some sense, true and meaningless in some sense, false and meaningless in some sense, and true and false and meaningless in some sense.


Acties:
  • 0 Henk 'm!

  • technorabilia
  • Registratie: November 2006
  • Laatst online: 15-09 14:44
@Dirk
De paginering heb ik als eerste geprobeerd. De links uit de browser gebruikt en "forum" veranderd in "rss". Dat leek op het eerste gezicht goed te werken totdat ik erachter kwam dat elke link hetzelfde resultaat gaf. Achteraf gezien geeft dat natuurlijk ook problemen het de instelling "aantal berichten per pagina" uit mijn profiel... :P

Na wat zoeken stuitte ik op de volgende informatie: RFC 5005: Feed Paging and Archiving; Paged Feeds.

Uit de output van de huidige RSS feed:
XML:
1
<atom:link href="https://gathering.tweakers.net/rss/list_messages/2040642" rel="self" type="application/rss+xml"/>

Daar zou dan (denk ik) nog iets bij kunnen komen als:
XML:
1
2
3
4
5
<atom:link href="https://gathering.tweakers.net/rss/list_messages/2040642?page=1" rel="first" type="application/rss+xml"/>
<atom:link href="https://gathering.tweakers.net/rss/list_messages/2040642?page=4" rel="previous" type="application/rss+xml"/>
<atom:link href="https://gathering.tweakers.net/rss/list_messages/2040642?page=5" rel="self" type="application/rss+xml"/>
<atom:link href="https://gathering.tweakers.net/rss/list_messages/2040642?page=6" rel="next" type="application/rss+xml"/>
<atom:link href="https://gathering.tweakers.net/rss/list_messages/2040642?page=9" rel="last" type="application/rss+xml"/>

Edit:
Direct de site scrapen zou ik ook kunnen doen als ik voorbij de cookie wall kom, maar via RSS of een API heeft natuurlijk wel mijn (en ik denk ook jullie?) de voorkeur.

Edit 2:
De link met ?limit=999 geeft inderdaad op dit moment de juiste informatie.
code:
1
2
3
4
5
6
len=181
181 Tomba https://gathering.tweakers.net/forum/list_message/67309904#67309904
180 barrymel https://gathering.tweakers.net/forum/list_message/67308818#67308818
...
2 technorabilia https://gathering.tweakers.net/forum/list_message/65323070#65323070
1 technorabilia https://gathering.tweakers.net/forum/list_message/65323062#65323062

[ Voor 18% gewijzigd door technorabilia op 02-06-2021 08:48 ]

👉🏻 Blog 👈🏻


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 10:02

crisp

Devver

Pixelated

@technorabilia RSS werkt natuurlijk een beetje anders; die begint met de laatste post. Als er een nieuwe post is dan staat die bovenaan als je de feed weer opvraagt. Je moet dus alleen bijhouden waar je 'gebleven was' (dat doet een RSS reader in feite ook).

We hebben verder geen ondersteuning voor paginering in de feeds. Als een topic dus meer dan 999 posts heeft dan kan je niet meer het hele topic via RSS ophalen.

[ Voor 32% gewijzigd door crisp op 02-06-2021 13:17 ]

Intentionally left blank


Acties:
  • +1 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 10:02

crisp

Devver

Pixelated

Maar nog even specifiek over het scrapen van de site zelf:
technorabilia schreef op dinsdag 1 juni 2021 @ 19:45:
Afgesplitst van Cookies op Tweakers.net.
[...]
Hoe bepaal ik bijvoorbeeld een tweakers_token?
Die zit in de cookiewall zelf; je moet dus eerst een pagina opvragen waarbij je de cookiewall krijgt, en dan het token uit de HTML vissen:
HTML:
1
<input type="hidden" name="tweakers_token" value="GazHLkLMYLeFfe1Y/3p+Cmlttx7Up2Gnm5XSUqPG">

die moet je dus in je POST request mee terug sturen.
Cookies __Secure-TnetID en een reeks SS* cookies worden gezet, maar ik blijf na het accepteren van de cookies steeds maar de vraag houden of ik cookies wil accepteren. Waar wordt mijn keuze opgeslagen? :?

Wat mis ik?
Je keuze wordt serverside gekoppelt aan de sessie. Overigens kan het zo zijn dat na het posten je een nieuwe sessiecookie krijgt. Wij maken onderscheid tussen first hit en return visit. Sessies voor first hit slaan wij nog niet permanent op (omdat heel veel visits van bots en crawlers geen cookies opslaan en het geen zin heeft al die sessies te gaan bewaren). Je herkent deze sessie aan de leading dot '.' voor het sessie-id in de __Secure-TnetID cookie.

De POST van de cookiewall is feitelijk een return visit; je krijgt dan meestal hetzelfde sessie-id terug maar zonder de leading dot.

Je zou ook de user-agent aan kunnen passen naar bijvoorbeeld eentje die lijkt op die van Googlebot of een andere bekende searchbot, of iets met 'crawler' er in.

Let wel op dat je niet te veel/vaak scraped; dan kan je IP geblockt worden.

[ Voor 7% gewijzigd door crisp op 02-06-2021 13:33 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • technorabilia
  • Registratie: November 2006
  • Laatst online: 15-09 14:44
crisp schreef op woensdag 2 juni 2021 @ 13:24:
Die zit in de cookiewall zelf; je moet dus eerst een pagina opvragen waarbij je de cookiewall krijgt, en dan het token uit de HTML vissen:
Duidelijk!, Heb ik gedaan en ik krijg nu ook netjes de pagina terug. Dus dat lijkt in orde nu.
Je zou ook de user-agent aan kunnen passen naar bijvoorbeeld eentje die lijkt op die van Googlebot of een andere bekende searchbot, of iets met 'crawler' er in.
Ik doe nu mijn browser na, maar wat zou een nette user-agent zijn?
Python:
1
2
s.headers.update(
        {"User-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36"})

Zoiets?
code:
1
User-Agent: TechnorabiliaBot/1.0 (simon@technorabilia.com)

👉🏻 Blog 👈🏻


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 10:02

crisp

Devver

Pixelated

technorabilia schreef op woensdag 2 juni 2021 @ 16:50:
[...]


Duidelijk!, Heb ik gedaan en ik krijg nu ook netjes de pagina terug. Dus dat lijkt in orde nu.


[...]


Ik doe nu mijn browser na, maar wat zou een nette user-agent zijn?
Python:
1
2
s.headers.update(
        {"User-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36"})

Zoiets?
code:
1
User-Agent: TechnorabiliaBot/1.0 (simon@technorabilia.com)
Lijkt me netjes :)

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • technorabilia
  • Registratie: November 2006
  • Laatst online: 15-09 14:44
@crisp
Klein vraagje nog op deze mooie zondagochtend...

Het betreffende topic heeft nu 181 messages verdeeld over twee pagina's van 100 messages per pagina.

Nu kan ik de pagina's opvragen totdat ik een status code <> 200 tegenkom. Alleen ik krijg nu al "snel" een 429 Too Many Requests status code om mijn oren.

Vraag:
Hoe zit de rate limit in elkaar? Hoe kan ik veilig uitvragen zonder dat ik wordt geblokkeerd? :P

PaginaMessagesStatus code
01-100200
1101-181200
2101-181307Bestaat niet en redirect naar 1

👉🏻 Blog 👈🏻


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 10:02

crisp

Devver

Pixelated

Ik kan je niet precies uitleggen hoe de ratelimiting in elkaar zit, maar als je tegen 429 responses oploopt dan vraag je simpelweg te vaak en/of te snel achter elkaar pagina's op.

Houdt je zelf ergens bij welke posts je al gezien hebt? Zo ja, waarom zou je dan elke keer alle pagina's opvragen? Uit de broncode van pagina 2 is ook wel op te maken dat er geen pagina 3 is. En eventueel zou je ook gewoon alleen /last op kunnen vragen om te kijken of er nieuwe posts zijn. Als je dat bijvoorbeeld eens in de paar minuten doet is er niet zoveel aan de hand.

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • technorabilia
  • Registratie: November 2006
  • Laatst online: 15-09 14:44
@Verwijderd
Ik hou niks bij. Het scriptje zal ik misschien 1x per maand of kwartaal uitvoeren. Ik zou het bijna met de hand kunnen doen... ;)
Ik verzamel de gegevens die zijn individueel gepost en zet deze in een tabel met wat sorteringen. Meer is het niet.

Aha, ik zag zo snel geen piefje in -of response van- de pagina waarmee ik kon zien of het de laatste pagina was, maar ik zal nog eens goed kijken.
Ik zal de individuele pagina's wel opvragen met een ruime tussenpoos. Komt goed.

Bedankt.

👉🏻 Blog 👈🏻


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 10:02

crisp

Devver

Pixelated

Dan denk ik dat je gewoon de requests te snel achter elkaar deed. Een kleine tussenpoos zou dat inderdaad moeten oplossen :)

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • technorabilia
  • Registratie: November 2006
  • Laatst online: 15-09 14:44
@crisp
Ik denk het.
Ik zal het wat kalmer aan doen.

Overzichtjes zijn inmiddels gemaakt.
technorabilia in "[Synology] Geheugen upgrade ervaringen per model"
Bedankt voor je hulp!

👉🏻 Blog 👈🏻

Pagina: 1