账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    关于WebMagic抓取的链接的集合异常问题。
    46
    0

    我可以用webmagic顺利地抓取网页上的所有链接,并保存在一个集合里面,然而当我运行了一段普通的代码后,这个集合里面的链接数量就变了,好奇怪,谁能解释一下吗?
    代码如下:

    List<String> homeworkUrlList = page.getHtml().xpath("//tr[@class='altrow']//td[1]").links().all();
                if(homeworkUrlList!=null && homeworkUrlList.size()>0){
    //                JSONArray jsonArray = new JSONArray();
    //                List<String> homeworkUrlList2 = homeworkUrlList;
    //                int courseid = Integer.parseInt(pageUrl.substring(pageUrl.indexOf("=")+1));
    //                for(String homeworkUrl: homeworkUrlList){
    //                    int homeworkId = Integer.parseInt(homeworkUrl.substring(homeworkUrl.lastIndexOf("=")+1));
    //                    tdid2 = tdid+String.valueOf(homeworkId);
    //                    finish = page.getHtml().xpath("//td[@id='"+tdid2+"']/span/text()").toString();
    //                    //System.out.println(finish);
    //                    
    //                    if(finish.equals("未提交")){
    //                        JSONObject jsonobject = new JSONObject();
    //                        jsonobject.put("userid", login.id);
    //                        jsonobject.put("courseid",courseid );
    //                        jsonobject.put("homeworkid", homeworkId);
    //                        jsonArray.add(jsonobject);        
    //                    }
    //                }
    //                
    //                if(jsonArray != null && jsonArray.size()>0){
    //                    page.putField("unfinish", jsonArray);
    //                }
    //                System.out.println("homework list:"+homeworkUrlList);
                    System.out.println(homeworkUrlList.size());
                    page.addTargetRequests(homeworkUrlList);
                }

    云服务器那里截图不方便,我把结果复制下来。
    下面是运行了注释部分的代码前后的结果的一部分:

    运行注释部分的代码前:

    10
    get page: http://www.scholat.com/course/S_homeworkList.html?courseId=559
    15
    get page: http://www.scholat.com/course/S_homeworkList.html?courseId=568
    11
    get page: http://www.scholat.com/course/S_homeworkList.html?courseId=282
    15
    get page: http://www.scholat.com/course/S_homeworkList.html?courseId=708
    15
    get page: http://www.scholat.com/course/S_homeworkList.html?courseId=201
    15
    get page: http://www.scholat.com/course/S_homeworkList.html?courseId=132
    15
    get page: http://www.scholat.com/course/S_homeworkList.html?courseId=164
    11
    get page: http://www.scholat.com/course/S_homeworkList.html?courseId=444
    get page: http://www.scholat.com/course/S_homeworkList.html?courseId=166
    1
    get page: http://www.scholat.com/course/S_homeworkList.html?courseId=247
    15
    get page: http://www.scholat.com/course/S_homeworkList.html?courseId=206
    7
    get page: http://www.scholat.com/course/S_homeworkList.html?courseId=1168
    14
    get page: http://www.scholat.com/course/S_homeworkList.html?courseId=297
    8
    get page: http://www.scholat.com/course/S_homeworkList.html?courseId=300
    1
    get page: http://www.scholat.com/course/S_homeworkList.html?courseId=219
    15
    get page: http://www.scholat.com/course/S_homeworkList.html?courseId=445
    6
    get page: http://www.scholat.com/course/S_homeworkList.html?courseId=494
    
    get page: http://www.scholat.com/course/S_homeworkList.html?courseId=166
    1
    get page: http://www.scholat.com/course/S_homeworkList.html?courseId=247
    unfinish:    [{"homeworkid":4404,"userid":1,"courseid":247}]
    插入未提交作业表
    3
    get page: http://www.scholat.com/course/S_homeworkList.html?courseId=512
    unfinish:    [{"homeworkid":9269,"userid":1,"courseid":512},{"homeworkid":8344,"userid":1,"courseid":512},{"homeworkid":8343,"userid":1,"courseid":512}]
    插入未提交作业表
    get page: http://www.scholat.com/course/S_oneHomework.html?courseId=247&;homeworkId=4404
    no match!
    get page: http://www.scholat.com/course/S_oneHomework.html?courseId=512&;homeworkId=9269
    no match!
    get page: http://www.scholat.com/course/S_oneHomework.html?courseId=512&;homeworkId=8344
    no match!
    get page: http://www.scholat.com/course/S_oneHomework.html?courseId=512&;homeworkId=8343
    no match!
    登陆信息正确!!!

    也就是说,本应该homeworkUrlList的数量很多的,运行了只是部分的代码以后却变少了,百思不得解,望有人能指点迷津!!
    下面是pipeline的代码:

    if(Pattern.matches(pattern3, resultItems.getRequest().getUrl())){
                JSONArray jsonArray = resultItems.get("unfinish");
                if(jsonArray!=null && jsonArray.size()>0){
                    for(int i=0;i<jsonArray.size();i++){
                        Unfinish unfinish = new Unfinish();
                        unfinish.setUserId(jsonArray.getJSONObject(i).getInt("userid"));
                        unfinish.setCourseId(jsonArray.getJSONObject(i).getInt("courseid"));
                        unfinish.setHomeworkId(jsonArray.getJSONObject(i).getInt("homeworkid"));
                        System.out.println("插入未提交作业表");
                        unfinishDao.add(unfinish);
                    }
                }
            }

    难道是pipeline的代码影响了吗?可是表面看上去pipeline的代码只是取数据和存数据而已。

    0
    打赏
    收藏
    点击回答
        全部回答
    • 共 0 条
    • ◇樱花巷ぴ 普通会员 1楼

      WebMagic抓取的链接集合异常通常是由于网络问题、服务器问题或者抓取策略的问题引起的。以下是一些可能的原因和解决方案:

      1. 网络问题:如果抓取的链接集中在某个地理位置或者服务器的某一特定部分,可能会导致集合异常。解决方案是尝试在其他网络环境中抓取相同的内容,或者调整抓取策略,避免集中在某个特定区域或者服务器。

      2. 服务器问题:如果服务器的性能下降或者负载过大,也可能导致集合异常。解决方案是检查服务器的负载情况,如果负载过大,可能需要增加服务器的资源或者使用负载均衡。

      3. 抓取策略问题:如果抓取的链接集合包含恶意或者敏感的内容,可能需要调整抓取策略,避免抓取这些内容。解决方案是使用安全的抓取策略,例如使用代理IP,或者使用爬虫框架。

      4. WebMagic本身的问题:如果WebMagic本身的问题导致了集合异常,例如错误的抓取规则或者限制了抓取的链接,那么可能需要修复WebMagic本身的问题。

      5. 网络防火墙或者安全设置问题:如果抓取的链接集合被网络防火墙或者安全设置阻止,那么可能需要检查网络防火墙或者安全设置,以确保能够抓取这些链接。

      总的来说,如果WebMagic抓取的链接集合异常,应该检查网络、服务器、抓取策略、WebMagic本身以及网络防火墙或者安全设置等多个方面,找出问题的原因并采取相应的解决方案。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部