Как я могу соскрести с веб-страницы, которая использует javascript для загрузки элементов при прокрутке? - PullRequest
0 голосов
/ 01 февраля 2020

Мой друг спросил, могу ли я написать веб-скрипт для сбора данных о покемонах с определенного c веб-сайта.

Я написал следующий код для рендеринга javascript и получения определенного класс для сбора данных с веб-сайта (https://www.smogon.com/dex/ss/pokemon/).

Проблема - , страница загружает больше записей при прокрутке страницы вниз. Есть ли способ соскоба с этого? Я новичок в веб-очистке, поэтому я не совсем уверен, как все это работает.

from requests_html import HTMLSession

def getPokemon(link):
    session = HTMLSession()
    r = session.get(link)
    r.html.render()
    for pokemon in r.html.find("div.PokemonAltRow"):
        print(pokemon)
    quit()

getPokemon('https://www.smogon.com/dex/ss/pokemon/')

1 Ответ

1 голос
/ 01 февраля 2020

Данные фактически присутствуют в источнике страницы. См. view-source:https://www.smogon.com/dex/ss/pokemon/ (он присутствует внутри тега сценария как переменная javascript).

import requests
import re
import json


response = requests.get('https://www.smogon.com/dex/ss/pokemon/')

# The following regex will help you take the json string from the response text
data = "".join(re.findall(r'dexSettings = (\{.*\})', response.text))

# the above will only return a string, we need to parse that to json in order to process it as a regular json object using `json.loads()`
data = json.loads(data)

# now we can query json string like below.
data = data.get('injectRpcs', [])[1][1].get('items', [])

for row in data:
  print(row.get('name', ''))
  print(row.get('description', ''))

Смотрите его в действии здесь

...