当前位置: 首页 > 知识库问答 >
问题:

用包含多个页面的多个字母标签抓取网站

卢文博
2023-03-14

我正在抓取一个网站,该网站在A-Z选项卡中按字母顺序列出数据,每个字母选项卡还包含多个页面。我如何从中提取所有URL?

公共静态void main(字符串[]args)引发异常{

String keyword = "a";
String url = "http://www.medindia.net/drug-price/brand-index.asp?alpha=" + keyword; 

Document doc = Jsoup.connect(url).get();
//Elements pages = doc.select("div.pagination a"); 
Element table = doc.select("table").get(1);

for (Element row : table.select("tr")) {
    for (Element tds : row.select("td")) {
        Elements links = tds.select("a[href]");
        for (Element link : links) {
            System.out.println("link : " + link.attr("href"));
            System.out.println("text : " + link.text());
           }
        }
    }

共有1个答案

汤承德
2023-03-14

所以我能够找出如何从每个字母表选项卡和每个字母表选项卡内的每个页面中刮取数据。下面是代码。然而,在抓取了几百个链接后,我得到了一个读取超时错误。有没有有效的方法?我可以对此应用多线程吗?

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

        final int OK = 200;
        String currentURL;
        int page = 1;
        int status = OK;
        Connection.Response response = null;
        Document doc = null;
        String[] keywords = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
        //String keyword = "a";
        for (String keyword : keywords){
            final String url = "https://www.medindia.net/drug-price/brand-index.asp?alpha="+keyword; 
            while (status == OK) {
                currentURL = url +"&page="+ String.valueOf(page); 
                response = Jsoup.connect(currentURL)
                        .userAgent("Mozilla/5.0")
                        .execute();
                status = response.statusCode();


                if (status == OK) {
                    doc = response.parse();

                    Element table = doc.select("table").get(1);

                    for (Element rows : table.select("tr")) {
                        for (Element tds : rows.select("td")) {
                            Elements links = tds.select("a[href]");
                            for (Element link : links) {
                                System.out.println("link : " + link.attr("href"));
                                System.out.println("text : " + link.text());
                            }
                        }
                    }

                }
                page++;
            }

        }
    }
 类似资料:
  • 我想刮从多个网站与类似的网址的,如https://woollahra.ljhooker.com.au/our-team, https://chinatown.ljhooker.com.au/our-team和https://bondibeach.ljhooker.com.au/our-team. 我已经写了一个脚本,第一个网站的工作,但我不知道如何告诉它从其他两个网站刮。 我的代码: 有没有一种方

  • 问题内容: 我正在尝试抓取此网站:http : //data.eastmoney.com/xg/xg/ 到目前为止,我已经使用selenium执行javascript并抓取了表格。但是,现在我的代码仅使我获得第一页。我想知道是否有一种方法可以访问其他17个页面,因为当我单击下一页时,URL不会更改,因此我不能每次都遍历另一个URL 下面是我到目前为止的代码: 还是我每次单击后都可以使用webdri

  • 问题内容: 在回答上一个问题之后,我现在尝试抓取网址的多个页面(给定季节中包含游戏的所有页面)。我还尝试抓取多个父网址(季节): 首先,我尝试了两次代码,而没有在第14行隐式等待或在35上进行睡眠。第一个结果给出了套接字错误。在抓取了两个良好的页面后,第二个结果停顿而没有错误。 然后添加如上所述的时间等待,但他们没有帮助。 由于结果不一致,我猜测是在循环结束与下一次运行之间重置连接。我想知道这是否

  • 问题内容: 在先前的问题中,一位作者建议使用aiohttp的新语法从中获取多个网址: 但是,当其中一个请求中断时(如上所述,由于导致错误),则错误不会得到处理,整个中断。 我就开始寻找插入有关的结果的测试,比如找地方了,或者一个,但我只是不理解如何与工作,与各种对象。 由于仍然很新,因此没有很多示例。如果向导可以显示如何执行此操作,对许多人来说将非常有帮助。毕竟,大多数人想要测试的第一件事就是同时

  • 我面临的问题很简单。如果我试图从一个网站获取一些数据,有两个同名的类。但是它们都包含一个具有不同信息的表。我所拥有的代码只向我输出第一个类的内容。它看起来像这样: 如何让代码输出两个表的内容或仅输出第二个表的内容?提前感谢您的回答!

  • 问题内容: 我正在尝试从PGA.com网站上获取数据,以获取美国所有高尔夫球场的表格。在我的CSV表中,我想包括高尔夫球场的名称,地址,所有权,网站,电话号码。有了这些数据,我想对其进行地理编码并放入地图中,并在计算机上拥有本地副本 我利用Python和Beautiful Soup4提取了我的数据。到目前为止,我已经提取了数据并将其导入CSV,但是现在我遇到了从PGA网站上的多个页面抓取数据的问题