大三上寒假15天--第12天
今天继续学习webmagic
已经可以爬取出目录和跳转去信件的页面,不知道是一直有还是后来加的,现在好像多了哥跳转中页面,目录给的链接不是直接的信件页面,所以我还需要再加一条爬取跳转中页面的提供的url然后访问,才可以爬取信件内容,但是不知道是正则表达式的问题还是什么,总之爬取不到想要的url一直是null,爬取到的为:
url: http://www.beijing.gov.cn/so/view?qt=%E4%BF%A1%E4%BB%B6&location=2&reference=5BED02004DBE50389DA483B44DF7B504&url=816D9628B2B6451D70BB05836297BD537AD9C7CA72A996F247E032FAD6786550657516097B73EA55C88868977934111E39B9144602CBA42CCAE2B1D7E84EDD3F624968D6D3B0B36D5D887A620F411AEDA9815497116468E324A03EAA90DBCC31&title=%E5%85%B3%E4%BA%8E%E4%BF%A1%E4%BB%B6%E7%BC%96%E5%8F%B7%E4%B8%BA40012481%E7%9A%84%E4%BF%A1%E4%BB%B6%E8%87%B3%E4%BB%8A%E6%9C%AA%E5%9B%9E%E5%A4%8D%E7%9A%84%E9%97%AE%E9%A2%98&tab=all&siteCode=1100000088 allhtml: <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="referrer" content="never"> <title>跳转中......</title> <script type="text/javascript"> location.href = "http://www.beijing.gov.cn/hudong/hdjl/com.web.consult.consultDetail.flow?originalId=20026589"; </script> </head> <body> </body>
需要location.href中的http://www.beijing.gov.cn/hudong/hdjl/com.web.consult.consultDetail.flow?originalId=20026589,我的正则表达式为:http://www.beijing.gov.cn/hudong/hdjl/\\S+[^\"],一下为我的全部代码:
package my.webmagic; import us.codecraft.webmagic.Page; import us.codecraft.webmagic.Site; import us.codecraft.webmagic.Spider; import us.codecraft.webmagic.pipeline.FilePipeline; import us.codecraft.webmagic.processor.PageProcessor; import us.codecraft.webmagic.scheduler.FileCacheQueueScheduler; public class Getgov implements PageProcessor{ private Site site=Site.me().setRetrySleepTime(3).setSleepTime(100); /** * @param args */ public Site getSite() { // TODO Auto-generated method stub return site; } public void process(Page page) { // TODO Auto-generated method stub page.putField("allhtml",page.getHtml().toString()); String urlstr=null; for(int i=26;i<=26;i++){ urlstr="http://www.beijing.gov.cn/so/s?qt=%E4%BF%A1%E4%BB%B6&tab=all&siteCode=1100000088&page="+i; page.addTargetRequest(urlstr); System.out.println(urlstr); page.addTargetRequests(page.getHtml().links().regex("view\\S+8").all()); page.addTargetRequests(page.getHtml().links().regex("http://www.beijing.gov.cn/hudong/hdjl/\\S+[^\"]").all()); System.out.println(page.getHtml().links().regex("view\\S+8").all()); System.out.println(page.getHtml().regex("<title>跳转中......</title>")); } } public static void main(String[] args) { Spider.create(new Getgov()) .addUrl("http://www.beijing.gov.cn/so/s?qt=%E4%BF%A1%E4%BB%B6&tab=all&siteCode=1100000088&page=26") .addPipeline(new FilePipeline("./")) .setScheduler(new FileCacheQueueScheduler("./")) .thread(5) .run(); System.out.println("完成"); } }
匹配跳转中...成功输出:
我想很可能是正则的问题,但是并看不出来,而且我改成http://\\S+[^\"]是可以匹配到url的所以不是[^\"]的问题,很迷茫,中间只是加上了www.beijing.gov.cn/hudong/hdjl/是和location.href中的相同的啊,明天我会继续研究。