follow大神教程——实践java爬虫之四

题外话main中输出

for(int b:a)

 {
       System.out.println(b);
  }

遍历a这个容器,把它的元素取出来,赋值给b这个临时变量,然后将b打印出来。

按大神操作步骤修改之,运行

卧槽,必须得上图纪念一下了

164658_vPto_576429.png

非常好

ok 上代码:

FileReaderWriter.java

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class FileReaderWriter {
 //创建文件的函数createNewFile
 public static boolean createNewFile(String filePath) {
  boolean isSuccess = true;
  // 如有则将"\\"转为"/",没有则不产生任何变化
  String filePathTurn = filePath.replaceAll("\\\\", "/");
  // 先过滤掉文件名
  int index = filePathTurn.lastIndexOf("/");
  String dir = filePathTurn.substring(0, index);
  // 再创建文件夹
  File fileDir = new File(dir);
  isSuccess = fileDir.mkdirs();
  // 创建文件
  File file = new File(filePathTurn);
  try {
   isSuccess = file.createNewFile();
  } catch (IOException e) {
   isSuccess = false;
   e.printStackTrace();
  }
  return isSuccess;
 }
 //写入文件的函数
 public static boolean writeIntoFile(String content, String filePath,
   boolean isAppend) {
  boolean isSuccess = true;
  // 先过滤掉文件名
  int index = filePath.lastIndexOf("/");
  String dir = filePath.substring(0, index);
  // 创建除文件的路径
  File fileDir = new File(dir);
  fileDir.mkdirs();
  // 再创建路径下的文件
  File file = null;
  try {
   file = new File(filePath);
   file.createNewFile();
  } catch (IOException e) {
   isSuccess = false;
   e.printStackTrace();
  }
  // 写入文件
  FileWriter fileWriter = null;
  try {
   fileWriter = new FileWriter(file, isAppend);
   fileWriter.write(content);
   fileWriter.flush();
  } catch (IOException e) {
   isSuccess = false;
   e.printStackTrace();
  } finally {
   try {
    if (fileWriter != null)
     fileWriter.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
  return isSuccess;
 }
}

Cfsn.java

public class Cfsn {
 public String title;  //新闻标题
 public String CfsnUrl ;//网页链接
 
 //构造方法初始化数据
 public Cfsn(){
  title = "" ;
  CfsnUrl = "" ;
 }
 //格式化写入到本地时的排版
 public String writeString() {
  String result = "";
   result += "问题:" + title + "\r\n";
   result += "链接:" + CfsnUrl + "\r\n";
   result += "\r\n\r\n";
   return result;
 }
 
 
 @Override
 public String toString(){
  return "标题:"+title+"\n链接:"+CfsnUrl+"\n";
 }
}

Spider.java

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

//Spider类来存放一些爬虫常用的函数。
public class Spider {
 static String SendGet(String url) {
  // 定义一个字符串用来存储网页内容
  String result = "";
  // 定义一个缓冲字符输入流
  BufferedReader in = null;
  try {
   // 将string转成url对象
   URL realUrl = new URL(url);
   // 初始化一个链接到那个url的连接
   URLConnection connection = realUrl.openConnection();
   // 开始实际的连接
   connection.connect();
   // 初始化 BufferedReader输入流来读取URL的响应
   in = new BufferedReader(new InputStreamReader(
     connection.getInputStream(), "UTF-8"));
   // 用来临时存储抓取到的每一行的数据
   String line;
   while ((line = in.readLine()) != null) {
    // 遍历抓取到的每一行并将其存储到result里面
    result += line;
   }
  } catch (Exception e) {
   System.out.println("发送GET请求出现异常!" + e);
   e.printStackTrace();
  }
  // 使用finally来关闭输入流
  finally {
   try {
    if (in != null) {
     in.close();
    }
   } catch (Exception e2) {
    e2.printStackTrace();
   }
  }
  return result;
 }
 static ArrayList<Cfsn> GetCfsn(String content) {
  // 预定义一个ArrayList来存储结果
  ArrayList<Cfsn> results = new ArrayList<Cfsn>();
  // 用来匹配标题
  Pattern questionPattern = Pattern.compile("_blank\">(.+?)<");
  Matcher questionMatcher = questionPattern.matcher(content);
  // 用来匹配url,也就是问题的链接
  Pattern urlPattern = Pattern.compile("span><a href=\"(.+?)\"");
  Matcher urlMatcher = urlPattern.matcher(content);
  // 标题和链接要均能匹配到
  boolean isFind = questionMatcher.find() && urlMatcher.find();
  while (isFind) {
   // 定义一个知乎对象来存储抓取到的信息
   Cfsn zhuhuTemp = new Cfsn();
   zhuhuTemp.title = questionMatcher.group(1);
   zhuhuTemp.CfsnUrl = "http://www.cfsn.cn/news/" + urlMatcher.group(1);
   // 添加成功匹配的结果
   results.add(zhuhuTemp);
   // 继续查找下一个匹配对象
   isFind = questionMatcher.find() && urlMatcher.find();
  }
  return results;
 }
}

Main.java

import java.util.ArrayList;
public class Main {
 public static void main(String args[]) {
  // 定义即将访问的链接
  String url = "http://www.cfsn.cn/news/node_4534.htm";
  // 访问链接并获取页面内容
  String content = Spider.SendGet(url);
  // 获取该页面的所有的Cfsn对象
  ArrayList<Cfsn> myCfsn = Spider.GetCfsn(content);
  // 打印结果
  // 写入本地
  for (Cfsn cfsn : myCfsn) {
   FileReaderWriter.writeIntoFile(cfsn.writeString(),
     "D:/中国食品安全网.txt", true);
  }
 }
}

 

接下来将其搞到数据库中就得靠自己咯 [哭泣][哭泣][哭泣]

 

——未完待续——

转载于:https://my.oschina.net/SnifferApache/blog/286411

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面我来为你介绍一下如何使用Scrapy爬取豆瓣TOP250电影信息。 1. 安装Scrapy 首先,你需要安装Scrapy。如果你已经安装了Python,可以在命令行中使用以下命令安装Scrapy: ``` pip install Scrapy ``` 2. 创建Scrapy项目 接下来,我们需要创建一个Scrapy项目。在命令行中输入以下命令: ``` scrapy startproject douban_top250 ``` 这将会在当前目录下创建一个名为“douban_top250”的文件夹,其中包含了Scrapy项目的基本结构。 3. 编写爬虫代码 在“douban_top250/spiders”目录下创建一个名为“douban.py”的文件,并输入以下代码: ```python import scrapy class DoubanSpider(scrapy.Spider): name = 'douban' allowed_domains = ['movie.douban.com'] start_urls = ['https://movie.douban.com/top250'] def parse(self, response): for movie in response.xpath('//div[@class="hd"]'): yield { 'title': movie.xpath('.//span[@class="title"]/text()').extract_first(), 'rating': movie.xpath('../div[@class="bd"]/div[@class="star"]/span[@class="rating_num"]/text()').extract_first(), 'link': movie.xpath('.//a/@href').extract_first(), } next_page = response.xpath('//span[@class="next"]/a/@href') if next_page: yield response.follow(next_page[0], self.parse) ``` 这段代码定义了一个名为“DoubanSpider”的类,用于爬取豆瓣电影TOP250的电影名称、评分和链接。在这个类中,我们使用了XPath选择器来定位页面中的元素。 4. 运行爬虫 在命令行中进入“douban_top250”文件夹,并输入以下命令来运行爬虫: ``` scrapy crawl douban -o douban_top250.csv ``` 这将会运行刚才编写的“DoubanSpider”爬虫,并将结果保存在名为“douban_top250.csv”的文件中。 至此,你已经学会了如何使用Scrapy来爬取豆瓣TOP250电影信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值