微信公众号开发--善忘影视(七)

  |   0 评论   |   2,224 浏览

微信公众号开发--善忘影视(七)

今天我们就来说说数据抓取的问题,数据来源电影网站的数据抓取。

首先想着用网上现成的爬虫程序去抓取想要数据,然后倒入到数据库中。


  1. 八抓鱼采集器

    测试了一下, 抓取数据什么的功能不是很复杂, 自己设计的表数据, 住去也都是图形化界面,还有能直接导入的,功能还是挺齐全的, 但是免费版本没办法用。功能限制太大了。对于我导入数据来说太难了,毕竟影视的数据会很多。看下图资费情况 ,如果用于商业的话, 其实也还行,可以节约不少开发时间。不过配置起来的, 还是需要懂一点点代码的,不懂代码来用的话难度还是不小的。

QQ20160724-0@2ximage


  1. 火车头采集器

    和上面的原因的, 需要自己配置懂点html代码什么的,价格的话, 可能会便宜的, 如下图

imageQQ20160724-1@2x

所以这两个免费版本都不符合要求, 我还是自己写代码来抓取好了。 桌子前也有过抓取代码的经验, 所以写这个简单的抓取连接并不难。
java抓取数据,解析html比较简单。是用jsoup来做就好。方便快捷。再通过定时器来抓取,比较方便使用。如下代码以‘电影天堂’示例。

网站编码gbk,直接通过jsoup获取会有中文部分乱码,通过去连接url设置字符编码就可以解决乱码问题。
public static String readHtml(String myurl,String charsetName) {
        StringBuffer sb = new StringBuffer();
        URL url;
        try {
            url = new URL(myurl);
            BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream(), charsetName));
            String s = "";
            while ((s = br.readLine()) != null) {
                sb.append(s + "\r\n");
            }
            br.close();
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        }
        return sb.toString();
    }
一下就是抓取数据的主要代码,就只有几十行
public void downloadUrl(String urlString) {
        for (int i = min_page; i <= max_page; i++) {
            String url = String.format(urlString, i);
            System.out.println("当前链接:" + url);
            //这里需要设置http://www.dytt8.net/作为baseurl,解析连接的时候,会补上
            Document doc1 = Jsoup.parse(readHtml(url,"GBK"), 
            "http://www.dytt8.net/");
            //解析列表页面链接
            Elements links = doc1.select(".co_content8 .ulink");
            Elements links = doc1.select("a");
            for (Element link : links) {
                String absHref = link.attr("abs:href");
                if (absHref.indexOf("gndy") == -1 && absHref.indexOf("tv") == -1) {
                    continue;
                }
                String title = link.text();
                if (StringUtils.isNull(title)) {
                    continue;
                }
                //获取链接是否已经存在了,如果存在了,就返回对象
                MovieCrawl mc = weiXinService.selectMovieCrawlBySourceUrl(absHref);
                System.out.println(absHref);
                //解析具体页面字段信息
                Document doc = Jsoup.parse(readHtml(absHref,"GBK"), "http://www.dytt8.net/");
                MovieCrawl movieCrawl = new MovieCrawl();
                Elements contents = doc.select(".co_content8 #Zoom p");
                Iterator<Element> it1 = contents.iterator();
                if (it1.hasNext()) {
                    Element content = it1.next();
                    movieCrawl.setContent(content.html());
                }
                Elements tables = doc.select(".co_content8 #Zoom table a");
                Iterator<Element> it2 = tables.iterator();
                List<String> list = new ArrayList<>();
                while(it2.hasNext()) {
                    Element downloadlink = it2.next();
                    list.add(downloadlink.text());
                }
                movieCrawl.setPubTime(new Date());
                movieCrawl.setCreateTime(new Date());
                movieCrawl.setMovieType(7);
                movieCrawl.setSourceUrl(absHref);
                movieCrawl.setTitle(title);
                if (null != mc) {//如果已经抓取过了, 就要判断下载链接是否更新
                    weiXinService.updateMovieCraw(mc, list);
                } else {
                    weiXinService.insertMovieCraw(movieCrawl, list);
                }
            }
        }
    }   
这个就是获取url的路径调用方式
String urlString23 = "http://www.ygdy8.net/html/gndy/dyzz/list_23_%1$s.html";
String url = String.format(urlString, i);

评论

发表评论

validate