Próbuję zeskrobać stronę internetową z nieskończonymi przewijaniem.

Postępuję zgodnie z tym samouczkiem na złomowaniu Infinite Scrolling Strony internetowe: https://blog.scrapinghub.com/2016/06/22/scrized-Tips-From-The-pros-June-2016

Ale przykład podany jest całkiem łatwy, to uporządkowany obiekt JSON z żądaną ilością danych.

Chcę zeskrobać to https://www.bahiablancapropiDades.com/Buscar#/terenos/venta/bahia-blanca/Todos-los-barrios/rango-min=50.000,000,000,000

Odpowiedź XHR dla każdej strony jest dziwna, wygląda jak uszkodzony kod HTML W tak karcie sieci wygląda

Nie jestem pewien, jak poruszać się po przedmiotach wewnątrz "widoku". Chcę pająka wejść do każdego przedmiotu i pełzać niektóre informacje dla każdego.

W przeszłości z powodzeniem zrobiłem to z normalnym paginacją i zasadami prowadzącymi przez XPaths.

0
user3303019 24 luty 2019, 01:16

2 odpowiedzi

Najlepsza odpowiedź

Nie jest uszkodzony HTML, jest uciekł, aby zapobiec łamaniu JSON. Niektóre strony internetowe zwracają proste dane JSON i innych, takich jak ten, zwróci rzeczywisty html do dodania.

Aby uzyskać elementy, które musisz uzyskać HTML z odpowiedzi JSON i utwórz własną parsel Selector (jest taka sama, jak gdy używasz response.css(...)).

Możesz wypróbować następujące informacje w skorupce, aby uzyskać wszystkie linki w jednej z "następnych" stron:

scrapy shell https://www.bahiablancapropiedades.com/buscar/resultados/3

import json
import parsel

json_data = json.loads(response.text)
sel = parsel.Selector(json_data['view']) # view contains the HTML
sel.css('a::attr(href)').getall()
0
malberts 25 luty 2019, 08:36

https://www.bahiablankapropropiedades.com/Buscar/resultados/0.

To jest adres URL XHR. Podczas przewijania strony pojawi się 8 rekordów na żądanie. Więc jedna rzecz, zdobądź wszystkie rekordy XPath. Te rekordy dzielą się przez 8. Wydają liczbę żądań XHR. robić poniżej procesu. Twój problem rozwiąże. Mam ten sam problem jak ja. Zastosowałem poniżej logiki. będzie rozwiązać.

pagination_count = xpath of presented number

value = int(pagination_count) / 8

for pagination_value in value:
   url = https://www.bahiablancapropiedades.com/buscar/resultados/+[pagination_value]

Prześlij ten adres URL do funkcji przewijania.

1
shubham amane 24 luty 2019, 10:05