一、正题前的唠叨
第一篇实战博客,阅读量1000+,第二篇,阅读量200+,两篇文章相差近5倍,这个差异真的令我很费劲,截止今天,我一直在思考为什么会有这么大的差距,是因为干货变少了,还是什么原因,一直没想清楚,如果有读者发现问题,可以评论写下大家的观点,当出现这样的差距会是什么原因,谢谢大家。
二、分析汽车之家品牌Logo页面 2.1分析页面结构首先我们打开汽车之家品牌Logo选择页 https://car.m.autohome.com.cn/,我们以华颂为例,实际上我们就是需要将class是item的里面的img的src(图片路径),和strong里面的text(品牌)获取就行了,大家可以看到,这个其实很简单,相比上次我们获取页面,获取接口数据简单多了,为什么要单独拿一个作为一篇文章呢,就是因为这个地方还涉及到一个文件下载,这一块之前都没有提到过。
2.2页面中的坑
最开始抓取的时候,我发现很多地方src都是空,我就很纳闷为什么会这样,后来断点调试后才发现,汽车之家Logo图片在页面还未划到此处的时候,img是不会加载的,只是占一个位置在那,等到滚动条滚到哪,哪的图片就会加载,所以此处抓取img的路径时需要判断一下
三、动手开发 3.1准备Processorprivate class GetLogoInfoProcessor : BasePageProcessor //获取Logo信息 { public GetLogoInfoProcessor() { } protected override void Handle(Page page) { List<LogoInfoModel> logoInfoList = new List<LogoInfoModel>(); var logoInfoNodes = page.Selectable.XPath(".//div[@id='div_ListBrand']//div[@class='item']").Nodes(); foreach (var logoInfo in logoInfoNodes) { LogoInfoModel model = new LogoInfoModel(); model.BrandName = logoInfo.XPath("./strong").GetValue(); model.ImgPath = logoInfo.XPath("./img/@src").GetValue(); if (model.ImgPath == null) { model.ImgPath = logoInfo.XPath("./img/@data-src").GetValue(); } if (model.ImgPath.IndexOf("https") == -1) { model.ImgPath = "https:" + model.ImgPath; } logoInfoList.Add(model); //page.AddTargetRequest(model.ImgPath); //Site设置DownloadFiles为TRUE就可以自动下载文件 } page.AddResultItem("LogoInfoList", logoInfoList); } }