一、目标:
爬取美食杰上的粤菜菜谱的图片,并保存到本地。
URL:https://www.meishij.net/china-food/caixi/yuecai/.
二、思路:
- 观察要爬取图片的详情页的URL,写出详情页的正则表达式:“https:// www\.meishij\.net/zuofa/\S+\.html”
- 列表页上详情页链接的xpath:"//div[@class=“listtyle1_list clearfix”]/div/a/@href"
- 列表页的翻页xpath:"//*[@id=“listtyle1_w”]/div[2]/div/a[@class=“next”]/@href"
- 要爬取的图片的xpath:"//a[@id=“tongji_title”]/text()"
- 要爬取的图片对应的菜名的xpath://div[@class=“cp_headerimg_w”]"
- 判断当前页面是否为详情页
- 若为详情页,将图片和名称信息爬取下来
- 若不为文章页,在当前页面寻找详情页的链接地址和翻页地址,将它添加到抓取列表中
- 自定义Pipeline,将图片和对应的名称下载下来并保存在本地
三、代码:
- processor:
package ang03.processor;
import java.util.LinkedList;
import java.util.List;
import ang03.pipelline.DownloadPipeline;
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.pipeline.ConsolePipeline;
import us.codecraft.webmagic.processor.PageProcessor;
/**
* 爬取网站:"https://www.meishij.net/china-food/caixi/yuecai/"
* 将图片和菜名爬取下来,并保存在 E:\\spider\\
* @author Ada
*
*/
public class CatePictrue implements PageProcessor{
private Site site = Site.me()
.setRetryTimes(3)
.setSleepTime(1000)
.setCharset("utf-8");
//存储菜谱名的 List
private static List<String> picName = new LinkedList<String>();
//存储菜谱图片下载地址的 List
private static List<String> picUrl = new LinkedList<String>();
public void process(Page page