Проблема с очисткой сайта при использовании Java Jsoup, сайт не "прокручивает" - PullRequest
1 голос
/ 17 февраля 2020

Мой вопрос касается возможности очистки данных с определенных веб-сайтов. На данный момент мой алгоритм преобразует HTML в текст, затем проверяет наличие отмеченных слов, содержащихся в файле, и суммирует количество флагов.

Моя проблема заключается в невозможности «прокрутки» вниз при очистке сайта. Как вы можете видеть, он проверяет количество флагов в учетной записи Twitter, но оно ограничено 50 sh последними твитами. Надеюсь, я дал понять.

ps: я привел твиттер в качестве примера, и я не ищу что-то конкретное c для твиттера, но что-то более надежное.

Я буду очень благодарен за любые подсказки.

Пример вывода:

DHS и другие агентства: 0 экземпляров

Domesti c безопасность: 1 экземпляр

HAZMAT & Nuclear : 0 случаев

Проблемы со здоровьем + H1N1: 0 случаев

Безопасность инфраструктуры: 2 случая

Насилие на юго-западной границе: 1 случай

Терроризм: 0 случаев

Погода / Бедствие / Чрезвычайная ситуация: 2 случая

Кибербезопасность: 0 случаев

ОБЩИЕ ФЛАГИ: 6 случаев

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

import java.io.*;
import java.util.LinkedList;
import java.util.List;

public class Main {

static List<String> dhsAndOtherAgencies = new LinkedList<>();
static List<String> domesticSecurity = new LinkedList<>();
static List<String> hazmatNuclear = new LinkedList<>();
static List<String> healthConcern = new LinkedList<>();
static List<String> infrastructureSecurity = new LinkedList<>();
static List<String> southwestBorderViolence = new LinkedList<>();
static List<String> terrorism = new LinkedList<>();
static List<String> weatherDisasterEmergency = new LinkedList<>();
static List<String> cyberSecutiry = new LinkedList<>();
static String stream;



public static void main(String[] args) throws IOException {



    createLists();
    createStream();
    Raport raport = generateReport();
    System.out.println(raport);

}

static int flagStream(List<String> list, String stream){

    int counter = 0;
    for (String flag: list){
        if(stream.contains(flag)) {
            System.out.println(flag);
            counter++;
        }
    }

    return counter;
}

static Raport generateReport(){
    return new Raport(
            flagStream(dhsAndOtherAgencies,stream),
            flagStream(domesticSecurity,stream),
            flagStream(hazmatNuclear,stream),
            flagStream(healthConcern,stream),
            flagStream(infrastructureSecurity,stream),
            flagStream(southwestBorderViolence,stream),
            flagStream(terrorism,stream),
            flagStream(weatherDisasterEmergency,stream),
            flagStream(cyberSecutiry,stream)

    );

}
static void createStream() throws IOException {
    Document doc = Jsoup.connect("https://twitter.com/realDonaldTrump").userAgent("mozilla/17.0").get();
    stream = doc.text();
}
static void createLists() throws IOException {
    BufferedReader read = new BufferedReader(new FileReader("clearListAllCases.txt"));

    String input;

    int hashCounter = 0;

    while((input=read.readLine())!=null){
        if(input.charAt(0)=='#'){
            hashCounter++;
            continue;
        }
        switch (hashCounter){

            case 1:
                dhsAndOtherAgencies.add(input);
                break;
            case 2:
                domesticSecurity.add(input);
                break;
            case 3:
                hazmatNuclear.add(input);
                break;
            case 4:
                healthConcern.add(input);
                break;
            case 5:
                infrastructureSecurity.add(input);
                break;
            case 6:
                southwestBorderViolence.add(input);
                break;
            case 7:
                terrorism.add(input);
                break;
            case 8:
                weatherDisasterEmergency.add(input);
                break;
            case 9:
                cyberSecutiry.add(input);
                break;
        }
    }
}
}

 class Raport {

int a,b,c,d,e,f,g,h,i;
int totalFlags;

Raport(int a, int b, int c, int d, int e, int f, int g, int h, int i){
    this.a = a;
    this.b = b;
    this.c = c;
    this.d = d;
    this.e = e;
    this.f = f;
    this.g = g;
    this.h = h;
    this.i = i;
    totalFlags = a+b+c+d+e+f+g+h+i;
}



public String toString(){

    return "DHS & Other Agencies:\t\t\t"+a+" instances\n"+
            "Domestic security:\t\t\t\t"+b+" instances\n"+
            "HAZMAT & Nuclear:\t\t\t\t"+c+" instances\n"+
            "Health Concern + H1N1:\t\t\t"+d+" instances\n"+
            "Infrastructure Security:\t\t"+e+" instances\n"+
            "Southwest Border Violence:\t\t"+f+" instances\n"+
            "Terrorism:\t\t\t\t\t\t"+g+" instances\n"+
            "Weather/Disaster/Emergency:\t\t"+h+" instances\n"+
            "Cyber Security:\t\t\t\t\t"+i+" instances\n"+
            "TOTAL FLAGS:\t\t\t\t\t"+totalFlags+" instances";
}

}

1 Ответ

3 голосов
/ 17 февраля 2020

Я бы предложил открыть вкладку разработчика браузера, чтобы попытаться выяснить, какую ссылку / конечную точку веб-сайт использует для извлечения новых элементов для бесконечной прокрутки, поскольку JSoup не выполняет сам Javascript. Затем вы можете вызвать конечную точку с помощью JSoup и проанализировать результаты.

В случае, если она не работает, вероятно, было бы лучше перейти к HtmlUnit или Selenium как оба они являются полнофункциональными API веб-браузера, которыми вы можете управлять с помощью Java.

...