webmagic 爬虫框架使用笔记

webmagic 爬虫框架使用笔记

参考资料:
爬虫框架: http://webmagic.io/docs/zh/
正则表达式: https://regexr.com/ https://jex.im/regulex/#!flags=&re=^(a|b)*%3F%24
xpath: https://www.runoob.com/xpath/xpath-tutorial.html

爬虫框架

run()解构


Spider是执行爬虫的入口, 包括 PageProcess, Schedule, Downloader, Pipeline几个主要部分

发送求情

1. 如果解决网页需要登录的问题

1.1 在请求里添加cookie

  • 1.1.1 在site里面添加cookie

  • 1.1.2 在site里添加domain Cookie
    我最开始添加的是domain Cookie, 一直没有生效, 还没研究怎么使domain cookie生效
    找到原因了, 因为域名和URL里的不一样, 比如URL: https://www.baidu.com, 域名必须是 www.baidu.com, 如果是baidu.com,就会报错

  • 1.1.3 process的page中, 添加request, request中添加cookie

1.2 使用selenum插件模拟登录

如何设置不爬取页面,仅作为中间页

page.setSkip(true);

page.putField("name", page.getHtml().xpath("//h1[@class='entry-title public']/strong/a/text()").toString());
        if (page.getResultItems().get("name")==null){
            //skip this page
            page.setSkip(true);
        }

备注: 判断有没有值的时候, 最好用下面这个方法
StringUtils.isBlank(page.getResultItems().get("name").toString)

如何把数据保存入库

自定义pipeline
参考文章: https://www.jianshu.com/p/52785e3cf41e

踩过的坑

坑1. site里设置cookie

site.addCookie()里一定要加上domain, 不然他不会加到请求里面, 我查了4个小时,一步一步debug源码才查明白问题所在, 我想哭. 好处是把源码的执行流程过了一遍, 对这个框架稍微清楚了点.
血泪史:怎么追踪到这个问题的?

  1. HTTP发送请求的代码download模块里, cookie是在这之前被添加进去的
  2. 查看httpClient.execute()

爬虫框架里用到的知识点

xpath语法

B站的这个视频说的清晰明了简洁
https://b23.tv/XOYabj

  • / 表示子节点
  • // 表示下面所有节点里的东西
  • @表示属性
  • text() 文本

MySQL数据比对

爬下来的数据和数据库的数据作比对, 比较数据不一样的地方, 两张表的字段一模一样
select eid from T_COMPANY_INFO_QCC where (select count(1) from T_COMPANY_INFO where T_COMPANY_INFO.frname = T_COMPANY_INFO_QCC.frname) = 0;

关闭