因为项目需要做过不少的互联网信息采集工作,说一下感想,不对的地方愿指教。

新浪微博和豆瓣的爬虫,大约半年前做过,不知楼主需要的那些数据,总体而言,大约有这几种采集方法:

  • 新浪微博和豆瓣都提供了api,前提是必须得先申请一个key,返回的文档形式可以是json或者xml,都非常方便解析。缺点是,如果你要的数据比较特殊,而不仅仅是影评、书评这些,那就得用专门编写的爬虫
  • 爬虫程序,一般不是通用的,具有针对性,所以没多少爬虫软件,大家采集数据通常都是自己编写程序。这里就有一个语言选择的问题,我用Python比较多,C#和C++(Qt)的爬虫也写过,其他语言的爬虫相关的库,不太了解。下面是具体的介绍:



python成为数据采集最主要的工具,并不是因为他的流行,或者简单易学,而在于他对url请求的高度封装和字符串处理的极其优越的便捷性。而爬虫需要解决的,正这两个问题。



我们假设现在有这样一个需求:

要采集豆瓣某用户所有的书评和广播,譬如这样:

浏览器把资源文件渲染成了我们看到的网页的样子,我们如果要取出网页中的数据,就需要拿到资源文件。发起Http请求,然后解析服务器返回的响应,就是爬虫的工作,所以爬虫的第一步是获取html文件。





在面向对象的高级语言中,早已有人将http请求封装成了类库,你只需要调下接口,就能获得目标网页的源码。所以程序需要做的就是请求目标url,获取页面的源码,解析html。基本流程是:

  1. 获取目标页面源码,方法:调用对应的类库。
  2. 解析html文件,提取出自己想要的信息。方法:正则表达式或者解析html的库。



按照上述步骤,C++(Qt)涉及的类是:

  1. WebView,它的内核其实就是webkit,所以它就是一个功能原始的浏览器,他内置能够返回页面源码的函数,接受一个url的string类型参数,返回一个QString对象。
  2. WebView类有方法能够处理DOM。

C#(.net)涉及的类是:

  1. WebClient,WebRequest,HttpWebRequest等类,第一个封装得比较高级,写法简单,后面两个封装得低级,写起来麻烦但是用起来灵活,HttpWebRequest是WebRequest的一个子类。
  2. Html Agility Pack。

Python涉及的包是:

  1. urllib,urllib2,前者仅可以接受URL,不能伪装Header,但是需要用它的一个函数对post数据进行编码。类似于浏览器的有Selenium。
  2. BeautifulSoup。

上面三种相比,python写法最简单,操作也灵活,要获取源码只要写一句话就行。字符串处理python也毫不逊色于C#和C++。



前期需要准备的知识

  1. 了解http请求、抓包等知识(极其重要)
  2. 若python还没学那就先学python
  3. 学会使用urllib2和美丽汤这两个库,推荐 --> 用Python模拟登录网站 -- 简明现代魔法
  4. 找一个简单易抓的网站练练手,不需要登陆的,如songtaste
  5. 再来试试需要登录的,譬如教务系统一类的。

当你能够熟练使用urllib2和BeautifulSoup获取解析简单的页面以后,你会发现,更大的问题原来在后面:

  1. 豆瓣如果登陆失败三次以上,就需要输入验证码。
  2. 爬虫跑了十分钟以后,豆瓣他竟然把我的ip封了!
  3. 现在一般都用ajax来动态获取数据,光靠url是不行啦。
  4. 教务系统之类的网站喜欢用iframe,拿到源码一看,好像只有一个框架,没有内容。

可参考的解决方案:

  1. OCR?豆瓣的验证码十分扭曲且奇形怪状,想让机器自动识别难度不小。推荐的方法是获取验证码图片到本地,自己手动输入登录以后爬虫再接着自己玩。
  2. 首先是可以用代理,如果用goagent的话,你就到了加州了,同时ip不停地变,根本停不下来。但是可能访问速度会慢很多。所以并不推荐代理。而且貌似goagent的代理不支持https的请求。当然也有更简单的方法。注意每次请求的间隔稍微加长一些,1秒左右,这样的速度一般不会被封。ip被封后过一段时间就会恢复,把每次采集的量规划一下,多分几次完成。
  3. 学一学ajax的原理,依然还是post,而且ajax的好处在于可以直接拿到数据,而不需要在html文件里面找来找去。
  4. 有框架也没关系,内容就在框架里面,一层一层进去找。



tips:

如果要获取用户好友列表的话,别对准新浪微博,他的关注者显示不全,到十页左右就没了。出来一个提示:该用户粉丝太多,显示不全。



如答案有谬误请私信指正,谢谢。

大牛学习爬虫经验,转自知乎相关推荐

  1. 想成为一个高效的Web开发者吗?来看看大牛分享的经验吧~ #精选JAVASCRIPT前端开发...

    想成为一个高效的Web开发者吗?来看看大牛分享的经验吧~ 作为一个软(ku)件(bi)工(de)程(ma)师(nong),你有没有觉得做什么事都没时间?没时间学习新东西,没时间去回顾.整理原来写的烂代 ...

  2. python爬虫库的功能_Python学习爬虫掌握的库资料大全和框架的选择的分析

    学Python,想必大家都是从爬虫开始的吧.毕竟网上类似的资源很丰富,开源项目也非常多. Python学习网络爬虫主要分3个大的版块:抓取,分析,存储 当我们在浏览器中输入一个url后回车,后台会发生 ...

  3. 想成为一个高效的Web开发者吗?来看看大牛分享的经验吧

    想成为一个高效的Web开发者吗?来看看大牛分享的经验吧~ 作为一个软(ku)件(bi)工(de)程(ma)师(nong),你有没有觉得做什么事都没时间?没时间学习新东西,没时间去回顾.整理原来写的烂代 ...

  4. 【爬虫】Python爬虫经验分享--爬取码市招聘项目

    以下内容为本人原创,欢迎大家观看学习,禁止用于商业用途, ·作者:@Yhen ·原文网站:CSDN ·原文链接:https://blog.csdn.net/Yhen1/article/details/ ...

  5. 如何学习爬虫技术(问答版)

    写了一篇偏道的入门文章,涛哥说,不太入门,思来想去,应该是我陷入了知识诅咒(所谓知识诅咒是指,一旦人了解了某种知识,就很难站在没掌握这个知识的角度,去思考和理解他人). 为求简单直接,这里直接以问答的 ...

  6. 爬虫是什么,该如何学习爬虫呢?

    日常生活工作中,我们用Google.百度等搜索引擎能解决很多问题,但是随着需求的不断出现,纯粹地借助百度等手机信息是远远不够的,这个时候编写爬虫就成为了一个很有用的获取信息的方式.当然也会有人用爬虫来 ...

  7. Java菜鸟到大牛学习路线培训视频

    百度网盘下载 这是一套java菜鸟到大牛学习路线培训教程,由工作了10年的资深Java架构师整理.主要分5个阶段:Java程序员->Java初级软件工程师->Java中级软件工程师-> ...

  8. Java菜鸟到大牛学习路线培训教程

    这是一套Java菜鸟到大牛学习路线培训教程,由工作了10年的资深Java架构师整理.主要分5个阶段:Java程序员->Java初级软件工程师->Java中级软件工程师->Java高级 ...

  9. 我的选车经历--学习比经验更重要

    我的上篇博文中,谈及了交通事故.不少人向我抱怨说这篇文章太难懂,搞不清楚我想说的是什么.所以,我今天多准备了一个例子让您能更好地理解. 大约一年前,我太太要求我换掉她的购物用车,一台本田飞度. 我们在 ...

  10. 在学习爬虫的路上,有多少坑在前边

    在学习爬虫的路上,有多少坑在前边 前言 采集成功了,但是没有数据? 数据就在采集到的页面,并有正确的格式 数据就在采集到的页面,但提取的时候没有信息 补课:页面内到底有哪些信息 html 部分 css ...

最新文章

  1. SAP WM LT10事务代码的一个坑?
  2. loj6070【山东集训第一轮Day4】基因
  3. Windows Server 2016-Netdom Join加域并指定OU (一)
  4. golang中struct字段
  5. 你真的很熟分布式和事务吗?
  6. Druid 连接池的实用 配置详解
  7. 【解决办法】你目前是以 ***的身份登录。请注销,然后使用你用于阅读组织电子邮件的帐户登录 Outlook
  8. 葡萄城报表V11 SP2新版本震撼发布!
  9. 关闭eslint检验;vue-cli3搭建的vue项目关闭eslint;脚手架3关闭eslint;
  10. 2019年中国IT市场趋势热点
  11. IDEA——必备插件指南
  12. Android一个简单易用的进度条
  13. 用递归方法判断字符串是否是回文(Recursion Palindrome Python)
  14. SpringBoot 中使用 @Valid 注解 + Exception 全局处理器优雅处理参数验证
  15. 机器学习-吴恩达-笔记-12-推荐系统
  16. 同花顺公式转python_【转】 同花顺系统公式编写教程及函数用法基础(一)
  17. 不使用80,443,端口,域名还需要备案吗?域名没有备案应该怎么选服务器。
  18. 大数据工程师必备之数据可视化技术
  19. Unity中的混合光照
  20. android常用api大全,Android相关常用API……

热门文章

  1. oracle11g服务项及其启动顺序
  2. jsp 导出excel
  3. Storm原理及单机安装指南
  4. Asterisk 函数
  5. Pyqt Model/view框架 3.可编辑项
  6. js实现登录表单验证
  7. 多说评论如何显示最近访客
  8. php js树状菜单,php+mysql+js实现树形菜单代码
  9. mysql text 性能_MySQL - text 性能优化--记录一
  10. 哈工大计算机报深圳还是本部,哈工大本部和哈工大深圳哪个比较好?