没有API的第三方网站抓取

斯卡罗斯·伊利亚斯

根据几个组合框上的选择,我需要废弃网站。问题是没有API,而且URL是常量,因此我无法复制该URL以符合条件。

我使用firefox检查器设法弄清楚了post命令,在此处输入图片说明但是当在Java程序中使用它时,如下所示:

String url = "  https://gaiacrmkea.c-gaia.gr/city_thessaloniki/index.php";
    URL obj = new URL(url);
    HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();

    //add reuqest header
    con.setRequestMethod("POST");
    con.setRequestProperty("Accept-Language", "el-GR,el;q=0.8,en-US;q=0.5,en;q=0.3");
    String urlParameters = "fyear=2015&esex=0&cdief=Όλες";
    // Send post request
    con.setDoOutput(true);
    DataOutputStream wr = new DataOutputStream(con.getOutputStream());
    wr.writeBytes(urlParameters);
    wr.flush();
    wr.close();

    int responseCode = con.getResponseCode();
    System.out.println("\nSending 'POST' request to URL : " + url);
    System.out.println("Post parameters : " + urlParameters);
    System.out.println("Response Code : " + responseCode);

    BufferedReader in = new BufferedReader(
            new InputStreamReader(con.getInputStream()));
    String inputLine;
    StringBuffer response = new StringBuffer();

    while ((inputLine = in.readLine()) != null) {
        response.append(inputLine+"\n");

    }
    in.close();

    //print result
    System.out.println(response.toString());

不起作用。它仅返回图形和按钮,但不返回实际数据。当我复制参数并将其粘贴到firefox时,例如https://gaiacrmkea.c-gaia.gr/city_thessaloniki/index.php?fyear=2015&esex=0&cdief=Όλες

我说对了。

有任何想法吗?

编辑:我希望每天自动完成。

编辑2:解决了!根据ÖzhanDüz提供的代码,我添加了这些

Select type= document
                .query("#esex")
                .getSelect();
            type.setSelectedIndex(1);
            type.change();

            Select dep =document
                    .query("#cdief")
                    .getSelect();

            dep.setSelectedIndex(1);
            dep.change();

为了获得所有三个组合框。现在,我只需要自动执行此操作即可。

用户名

您可以使用开放式的ui4j Web自动化库。下载ui4j-all jar并使用Java 8运行该示例。

package test;

import java.util.List;

import com.ui4j.api.browser.BrowserEngine;
import com.ui4j.api.browser.BrowserFactory;
import com.ui4j.api.browser.Page;
import com.ui4j.api.dom.Document;
import com.ui4j.api.dom.Element;
import com.ui4j.api.dom.Select;

public class WebScraping {

    public static void main(String[] args) throws InterruptedException {
        BrowserEngine webkit = BrowserFactory.getWebKit();

        // load the page
        Page page = webkit.navigate("https://gaiacrmkea.c-gaia.gr/city_thessaloniki/index.php");
        page.show();

        // get the DOM
        Document document = page.getDocument();

        // find the year combobox
        Select year = document
                        .query("#fyear")
                        .getSelect();

        // select year 2011
        year.setSelectedIndex(0);
        // trigger the change event
        year.change();

        // Small delay before the page load
        Thread.sleep(2000);

        // find the data table
        Element table = document
                            .query("#example")
                            .query("tbody");

        // iterate all rows
        List<Element> rows = table.queryAll("tr");
        for (int i = 0; i < rows.size(); i++) {
            Element row = rows.get(i);

            // iterate all columns
            List<Element> cells = row.queryAll("td");

            StringBuilder builder = new StringBuilder();
            for (int j = 0; j < cells.size(); j++) {
                Element cell = cells.get(j);
                String text = cell.getText();
                builder.append(text).append(" ");
            }

            System.out.println(builder.toString());
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Azure网站无法与第三方API通信

从第三方网站API获得价值

如何为第三方网站创建 API?

使用Laravel Passport登录第三方网站

Paypal Pro DoDirectPayment API作为没有美国/英国/加拿大凭证的第三方

我应该从第三方网站或Windows获得所有驱动程序吗?

有没有一种方法可以使我的网站将第三方Cookie声明为第一方Cookie?

有没有办法阻止第三方打开 URL?

没有第三方客户端,是否可以连接Windows上的OpenVPN?

在Qt中使用第三方dll(没有可用的.lib文件)

在没有第三方程序的情况下禁用macOS中的密钥

如何在没有第三方软件的Windows 10下安装ISO?

如何使用ADB Wireless连接Android设备?没有任何第三方工具

没有第三方的Vercel next.js部署功能日志

在没有第三方路由库的情况下路由PUT请求

没有第三方工具,如何将.bat文件“转换”为.exe?

如何为没有第三方pkg的文本设置颜色

密码保护任何没有任何第三方软件的文件夹?

在没有任何第三方库的情况下从MySQL触发Shell脚本

没有第三方库的媒体上传到Twitter

排序html表格栏的客户端,没有第三方(jquery除外)

没有第三方库,是否可以在.NET Core中获取EmployeeID?

如何在没有第三方库的情况下为雪人制作动画?

如何从第三方数据库复制数据而没有副作用

Android如何在没有第三方的情况下发送帖子请求

Windows 7和Ubuntu上的热点,没有任何第三方软件

没有第三方软件,是否可以在Windows 8中挂载ISO映像?

在Windows 7上没有第三方软件的屏幕录像?

在没有第三方软件的情况下获取Windows 10激活密钥