Зачистка магазина Android - PullRequest
       3

Зачистка магазина Android

0 голосов
/ 08 ноября 2018

Я пытаюсь очистить страницы Магазина Android с помощью Beautiful Soup, чтобы получить файл со списком пакетов. Вот мой код:

from requests import get
from bs4 import BeautifulSoup
import json
import time

url = 'https://play.google.com/store/apps/collection/topselling_free'
response = get(url)
html_soup = BeautifulSoup(response.text, 'html.parser')
type(html_soup)

app_container = html_soup.find_all('div', class_="card no-rationale 
square-cover apps small")
file = open("applications.txt","w+")
for i in range(0,60):
#if range > 60 ; "IndexError: list index out of range"
    print(app_container[i].div['data-docid'])
    file.write(app_container[i].div['data-docid'] + "\n")

file.close()

Проблема в том, что я могу собрать только 60 имен пакетов, потому что JavaScript не загружен, и если мне нужно загрузить больше приложений, мне нужно прокрутить. Как я могу воспроизвести это поведение в Python, чтобы получить более 60 результатов?

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Я предлагаю использовать Scrapy с Splash

http://splash.readthedocs.io/en/stable/scripting-tutorial.html.

Splash - это браузер без головы, и вы можете рендерить JS и выполнять скрипты. Пример кода

function main(splash)
    local num_scrolls = 10
    local scroll_delay = 1.0

    local scroll_to = splash:jsfunc("window.scrollTo")
    local get_body_height = splash:jsfunc(
        "function() {return document.body.scrollHeight;}"
    )
    assert(splash:go(splash.args.url))
    splash:wait(splash.args.wait)

    for _ = 1, num_scrolls do
        scroll_to(0, get_body_height())
        splash:wait(scroll_delay)
    end        
    return splash:html()
end

Чтобы отобразить этот скрипт, используйте конечную точку execute для конечной точки render.html:

script = """<Lua script> """
scrapy_splash.SplashRequest(url, self.parse,
                            endpoint='execute', 
                            args={'wait':2, 'lua_source': script}, ...)

Я использую Scrapy для сканирования, и я считаю, что вам нужно периодически запускать сканирование. вы можете использовать Scrapyd для запуска Scrapy Spider.

Я получил этот код от здесь

0 голосов
/ 08 ноября 2018

Считаете ли вы более полнофункциональный скребок? Скрап специально разработан для работы: https://blog.scrapinghub.com/2016/06/22/scrapy-tips-from-the-pros-june-2016

Selenium - это как управление браузером с помощью кода - если вы можете сделать это лично, вы, вероятно, можете сделать это в селене: очищать сайты с бесконечной прокруткой

Другие пришли к выводу, что bs4 и запросов недостаточно для выполнения задачи: Как загрузить все записи в бесконечной прокрутке одновременно, чтобы проанализировать HTML-код в python

Также обратите внимание, что очистка может быть чем-то вроде серой области и что вы всегда должны стараться быть в курсе и уважать политику сайта. Их TOS и robots.txt всегда хороши для ознакомления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...