WebMagic学习

遇到的问题

  1. Log4j错误

    解决:在src目录下添加配置文件 log4j.properties

     log4j.rootLogger=INFO, stdout, filelog4j.logger.org.quartz=WARN, stdoutlog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%d{MM-dd HH:mm:ss}[%p]%m%nlog4j.appender.file=org.apache.log4j.FileAppenderlog4j.appender.file.File=C:\\log4j\\webmagic\\webmagic.loglog4j.appender.file.layout=org.apache.log4j.PatternLayoutlog4j.appender.file.layout.ConversionPattern=%n%-d{MM-dd HH:mm:ss}-%C.%M()%n[%p]%m%n  
  2. 协议错误,有的网站需要的SSL协议比较高,尽量使用做高版本的jar包

     <dependency><groupId>us.codecraft</groupId><artifactId>webmagic-core</artifactId><version>0.7.3</version></dependency><dependency><groupId>us.codecraft</groupId><artifactId>webmagic-extension</artifactId><version>0.7.3</version></dependency>
  3. 状态码错误

    解决:主要是与site有关,下边两种解决办法暂时还没弄明白

     private Site site = Site.me().setRetryTimes(3).setSleepTime(3000).setUserAgent("Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0");或者  private Site site = Site.me().setRetryTimes(3).setSleepTime(3000).setUserAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36");
  4. 缺少HttpContext类

    解决:添加HTTPContext的Jar包

     <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.4</version></dependency>  

Webmagic学习配置

  1. 创建一个maven项目
  2. 在pom中引用jar包,引用完之后就基本好了

     <dependencies><dependency><groupId>us.codecraft</groupId><artifactId>webmagic-core</artifactId><version>0.7.3</version></dependency><dependency><groupId>us.codecraft</groupId><artifactId>webmagic-extension</artifactId><version>0.7.3</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.4</version></dependency></dependencies>

    Webmagic学习参考

  3. 参考博客:

     参考博客:https://www.xttblog.com/?s=webmagic   其中有些案例,我没有运行成功,我会将我自己的案例发布上去(src/File目录下为正式爬取的案例,src/Test下的程序为学习过程中找到的案例,也有自己测试的案例)动态页面爬取参考 http://webmagic.io/docs/zh/posts/chx-cases/js-render-page.htmlWebmagic的使用说明 http://webmagic.io/docs/zh/

案例

  1. 案例1 汽车之家游记爬取 (src/File/Test2)

    ### 如何判断页面数据为通过js动态获取的???

    #### 判断页面是否为js渲染的方式比较简单,在浏览器中直接查看源码(Windows下Ctrl+U,Mac下command+alt+u),如果找不到有效的信息,则基本可以肯定为js渲染。

    1. Windows中按Ctrl+U,再按Ctrl+F查找其中的内容,我查找的是第一个游记,结果没有找到,这就判定该页面的数据是通过js动态获取的。

    2. 如果判定该页面的数据是通过JS动态获取的,就开始找获取数据的链接:例如:此时只有这几个请求,当点击第二页的时候,又出现了几个链接。

    3. 点击新出现的第一个链接,选择preview,出现返回的数据,从中找到详情页的链接。也可以直接复制这个链接,在新的标签页打开(https://you.autohome.com.cn/summary/getsearchresultlist?ps=20&pg=1&type=3&tagCode=&tagName=&sortType=3) 按照上边,同样的点击第三页也同样出现了一个新的请求链接https://you.autohome.com.cn/summary/getsearchresultlist?ps=20&pg=2&type=3&tagCode=&tagName=&sortType=3) 比较这两个链接,发现这两个链接只是pg这个参数不同,根据这两个链接一个是第一页,一个是第二页,可以推测出每个列表页的链接

    4. 如果在新的标签页打开(我的谷歌浏览器安装了一个JsonView插件,查看json格式的数据比较方便)

    5. 这里就有详情页的地址,我们再看一下这个详情页的具体地址,链接后边的那个暂时不知道是什么用,大概只是一个标识作用,删去也可以访问,这样就可以根据上边的/details/112251拼接详情页的地址,这样知道了列表页的链接和详情的链接,就可以将这上面的游记都爬取下来了

    6. 当初我也就这样试了试,结果能爬下来,也就没管。但是后来查看这些游记,发现有的游记都只有一半,并不全,后来我又看网页,发现有的网页是只有一页(比如上边那个游记),有的网页有好几页(https://you.autohome.com.cn/details/112486#pvareaid=2174234),但时候后边附带着一个扩展全文的按钮,这时候就需要寻找全文的链接,否则爬取的只是一半的内容

    7. 接下来就是寻找完整页面的链接,点击展开全文按钮(https://you.autohome.com.cn/details/112486/b51ba31c58c7b84e0a52d8f50b811df4?handleType=1)连续找了几个这样的游记之后,发现只是后边的(b51ba31c58c7b84e0a52d8f50b811df4)这个参数不同,这里就需要找这个随机数了。重新刷新一下页面,出现了几个链接,一次点进去看看有没有这个随机数,终于在最后一个链接中找到了这个随机数,现在就需要拼接这个链接获取这个随机数。获取这个随机数后就开始拼接这个完整页面的链接。后来突然发现,该如何判断只有一页的页面,但是后来发现即使是一个页面也有随机数,这样访问同样也可以。

      单页面游记的随机数

    获取这个随机数之后,就可以拼接这个完整页面的链接,然后将链接加入带爬取队列。然后就跟正常的爬取一样了


  1. 案例2 马蜂窝旅游游记爬取(能爬取数据,但是数据爬不全)(src/File/Test0)

    1. 马蜂窝的爬取比较简单,只是最简单的列表页-详情页格式,只是在翻页的时候,页面只有5页,再看看每个列表页的格式(https://www.mafengwo.cn/yj/21536/1-0-2.html) 只是最后的数不同,应该就是代表页数。通过循环拼接链接,并将链接加入带爬取队列

    2. 但是这里有一个问题还没有解决:马蜂窝的游记都比较长,为了快速加载,每个游记都是分成几次加载,比如刚打开页面的时候,只是显示上边的一部分,当下滑到最下边的时候,就会JS请求继续获取下边的页面

    3. 当随着下滑,会加载出剩下的页面数据

    类似的,随着游记的长度不同,会有不同的加载次数,按照一般过程,都会要拼接加载的链接,然后获取数据,追加到同一个文件中,但是通过观察这几个链接,发现他们都有一个随机数,并且这个随机数并没有在页面中找到,导致现在爬取的数据只有一部分


  1. 案例3 携程旅游游记爬取(src/File/Test1_1)

    1. 携程旅游也是一个动态获取的页面,只不过他的动态获取只是翻页的时候的列表页是动态获取的,具体的详情页是正常的。所以只要获取翻页的链接就跟正常的列表-详情页的爬取是一样的了。

    2. 这个网站没有具体的翻页按钮,每次向下滑动页面,就会动态加载下一页的游记列表

    3. 这样就找到了翻页的链接 (http://you.ctrip.com/TravelSite/Home/IndexTravelListHtml?p=2&Idea=0&Type=100&Plate=0), 根据上边的链接发现只有那个p属性不同,应该是是代表页数。拼接这个链接,加入带爬取队列就可以了

欢迎大家访问(Star、Fork)

    GitHub地址 https://github.com/zhangHaoNiHao/WebMagic

转载于:https://www.cnblogs.com/Zhanghaonihao/p/9763572.html

Webmagic 爬虫框架 爬取马蜂窝、携程旅游、汽车之家游记信息相关推荐

  1. java 使用webmagic 爬虫框架爬取博客园数据

    java 使用webmagic 爬虫框架爬取博客园数据存入数据库 学习记录   webmagic简介: WebMagic是一个简单灵活的Java爬虫框架.你可以快速开发出一个高效.易维护的爬虫. ht ...

  2. 使用WebMagic爬虫框架爬取暴走漫画

    WebMagic是黄亿华先生开发的一款Java轻量级爬虫框架.我之所以选择WebMagic,因为它非常轻量级,可以学习爬虫的原理,而且用WebMagic非常容易进行功能扩展.也许你会听过另一个爬虫框架 ...

  3. Python Scrapy爬虫框架爬取51job职位信息并保存至数据库

    Python Scrapy爬虫框架爬取51job职位信息并保存至数据库 -------------------------------- 版权声明:本文为CSDN博主「杠精运动员」的原创文章,遵循CC ...

  4. 使用scrapy爬虫框架爬取慕课网全部课程信息

    爬取的链接: http://www.imooc.com/course/list 爬取的内容: 课程链接, 课程的图片url, 课程的名称, 学习人数, 课程描述 1.安装scrapy模块 pip in ...

  5. 基于SpringBoot框架Wbe Magic爬虫框架爬取招聘信息项目(1)

    涉及的技术点:SpringBoot框架.Web Magic爬⾍框架.MySQL.mybatis. 使用语言:Java. 使用工具:idea. 本篇文章主要讲解搭建项目 以及 如何将页面数据输出打印到i ...

  6. 用Scrapy爬虫框架爬取食品论坛数据并存入数据库

    这篇文章主要给大家介绍了食品网站的数据采集和存储过程,详解了如何分析网页结构.爬虫策略.网站类型.层级关系.爬虫方法和数据存储过程,最终实现将帖子的每条评论爬取到数据库中,并且做到可以更新数据,防止重 ...

  7. Python使用Scrapy爬虫框架爬取天涯社区小说“大宗师”全文

    大宗师是著名网络小说作家蛇从革的系列作品"宜昌鬼事"之一,在天涯论坛具有超级高的访问量.这个长篇小说于2015年3月17日开篇,并于2016年12月29日大结局,期间每天有7万多读 ...

  8. Python Scrapy 爬虫框架爬取推特信息及数据持久化!整理了我三天!

    最近要做一个国内外新冠疫情的热点信息的收集系统,所以,需要爬取推特上的一些数据,然后做数据分类及情绪分析.作为一名合格的程序员,我们要有「拿来主义精神」,借助别人的轮子来实现自己的项目,而不是从头搭建 ...

  9. Python 采用Scrapy爬虫框架爬取豆瓣电影top250

    scrapy 简介 在此,默认已经安装好Scrapy,如果没有安装可以到scrapy 官网下载安装. 注意: 在安装Scrapy之前首先需要安装一下python第三方库:(安装方法并不在本文讲解范围, ...

最新文章

  1. Oracle 又裁员,传 N+6 补偿
  2. AI新海诚就是在下,不信来玩
  3. 【TypeScript】防止对象改变
  4. Apache发布TomEE 7.1,支持Java 8和MicroProfile 1.2
  5. shell 编程中空格的使用,双引号,单引号,反引号
  6. html5 head 标签
  7. BugkuCTF-WEB题速度要快
  8. [ACM_几何] F. 3D Triangles (三维三角行相交)
  9. win8.1安装马上6,连不上
  10. ReferenceError: request is not defined
  11. Go基础:路径、文件名和包名的关系
  12. 南阳oj _600花儿朵朵(树状数组插线问点+坐标离散化)
  13. 3ds max 使用cloth修改器制作抱枕
  14. 计算机网络的时间,计算机网络时间同步技术原理介绍
  15. kafka中的offset理解
  16. 用python读取txt文件中的数据并画各类图形展示_Python实现读取txt文件中的数据并绘制出图形操作示例...
  17. linux使wifi进去低功耗,WiFi232低功耗系列模块加入路由器设置方法
  18. 猫眼APP影院静态界面
  19. ajax的11个框架
  20. 婚礼答谢宴ppt模板_婚礼答谢宴主持词简短婚礼答谢宴的主持词.doc-资源下载-金锄头文库...

热门文章

  1. html页面添加动态动画小人,使用CSS3各个属性实现小人的动画_html/css_WEB-ITnose
  2. fundamentals\SetTheory
  3. Unity中的SendMessage方法
  4. [Android应用开发] 01.快速入门
  5. Warning: error while crawling ~: boost::filesystem::status: Permission denied: ~/.gvfs
  6. 安卓应用启动其他应用的几种方式
  7. 中英文切换_儿子6岁了,我和他中英文自然切换的日常
  8. 【003】你猜我演案例(包含倒计时、随机数、色彩)_#VBA
  9. 最新校园跑腿小程序源码多校园版 含完整前后端+详细搭建教程
  10. 超级简单 !使用爆文阁单个或者批量下载B站 西瓜无水印视频、抖音视频教程!