精华内容
下载资源
问答
  • 用Nodejs做爬虫

    万次阅读 2016-05-07 13:03:13
    欢迎访文我的博客YangChen’s Blog引言提起爬虫,最容易想到的就是python,因为python给人的感觉就是啥都能干,但是之前用python做爬虫的过程还是很不爽的,主要问题来自这么几个方面:第一个是对爬来的网页dom操作...

    欢迎访文我的博客YangChen’s Blog

    引言

    提起爬虫,最容易想到的就是python,因为python给人的感觉就是啥都能干,但是之前用python做爬虫的过程还是很不爽的,主要问题来自这么几个方面:第一个是对爬来的网页dom操作上,第二个就是编码的处理,第三就是多线程,所以用python做爬虫其实并不是很爽,有没有更爽的方式呢?当然有那就是node.js!

    Nodejs做爬虫的优劣

    首先说一下node做爬虫的优势

    第一个就是他的驱动语言是JavaScript。JavaScript在nodejs诞生之前是运行在浏览器上的脚本语言,其优势就是对网页上的dom元素进行操作,在网页操作上这是别的语言无法比拟的。

    第二就是nodejs是单线程异步的。听起来很奇怪,单线程怎么能够异步呢?想一下学操作系统的时候,单核cpu为什么能够进行多任务处理?道理也是类似,在操作系统中进程对CPU的占有进行时间切片,每一个进程占有的时间很短,但是所有进程循环很多次,因此看起就像是多个任务在同时处理。js也是一样,js里有事件池,CPU会在事件池循环处理已经响应的事件,未处理完的事件不会放到事件池里,因此不会阻塞后续的操作。在爬虫上这样的优势就是在并发爬取页面上,一个页面未返回不会阻塞后面的页面继续加载,要做到这个不用像python那样需要多线程。

    其次是node的劣势

    首先是异步并发上。处理的好很方便,处理的不好就会很麻烦。例如要爬取10个页面,用node不做异步处理话,那返回的结果可不一定是按1、2、3、4……这个顺序,很可能是随机。解决的办法就是增加一个页面的序列戳,让爬取的数据生成csv文件,然后重新排序。

    第二个是数据处理上的劣势,这点是不如python的,如果只是单纯的爬数据,用node当然很好,但是如果用爬来的数据继续做统计分析,做个回归分析聚类啥的话,那就不能用node一步到底了。

    如何用nodejs做爬虫

    下面就要说一下如何用nodejs做爬虫了

    1、初始化项目文件

    在对应的项目文件夹下执行npm init来初始化一个package.json文件

    2、安装request和cheerio依赖包

    request听起来很熟悉吧,跟python里request功能一样。它的功能就是建立起对目标网页的链接,并返回相应的数据,这个不难理解。

    cheerio的功能是用来操作dom元素的,他可以把request返回来的数据转换成可供dom操作的数据,更重要的cheerio的api跟jquery一样,用$来选取对应的dom结点,是不很方便?对一个前端程序员来说,这比python的什么xpath和beautisoup方便了不知道多少啊哈哈

    安装命令也很简单,分别是npm install request --savenpm install cheerio

    3、引入依赖包并使用

    接下来就用request和cherrio写一个爬虫吧!

    首先引入依赖

    var request = require("request");
    var cheerio = require("cheerio");

    接下来就以爬取我们学校的新闻页为例吧,我们学校的新闻页面链接是http://news.shu.edu.cn/Default.aspx?tabid=446

    然后调用request的接口

    request('http://news.shu.edu.cn/Default.aspx?tabid=446',function(err,result){
        if(err){
            console.log(err);
        }
        console.log(result.body);
    })

    运行一下结果就是这样的

    http://7xr8op.com1.z0.glb.clouddn.com/QQ%E6%88%AA%E5%9B%BE20160226182051.png

    是不是很激动哈哈,html返回回来了。这样还是不够的,接下就是要处理下返回的数据,并提炼出我们想要获得的信息,这就轮到cheerio登场了

    将request返回的结果传入cheerio中,并获得想要获取的信息,看代码是不是想在写脚本的感觉?

    request('http://news.shu.edu.cn/Default.aspx?tabid=446',function(err,result){
        if(err){
            console.log(err);
        }
        var $ = cheerio.load(result.body);
       $('a[id^="dnn"]').each(function(index,element){
           console.log($(element).text());
       })
    })

    运行下结果如下:

    http://7xr8op.com1.z0.glb.clouddn.com/QQ%E6%88%AA%E5%9B%BE20160226191031.png

    这样一个简单的爬虫就完成啦,是不是很简单啊,当然这远远是不够的。

    4、设置请求头

    众所周知,http协议里,建立连接要发送请求头header,对于一些动态网页的爬取有时候需要设置user agent、cookies等等,那么这些设置如何使用呢?
    具体事例代码如下:

    var options = {
        url: startUrl+'?page=1',
        method: 'GET',
        charset: "utf-8",
        headers: {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36",
            "cookie": cookies
        }
    };
    request(options,function(err,response,body){
    //...
    })

    5并发控制

    爬取一个页面还好,要是页面多了就是无限制并发了,那肯定就要被封了,所以就要有一个并发控制,这里要介绍的就是async。跟上述一样要通过npm install async --save来安装并通过var async = require("async")来引入。

    具体以一个限制并发的方式来示例一下

    async.mapLimit(5,function(url,callback)){
    //...
    fetch(url,callback)
    })

    这里面的5就是限制的并发数量,可以自由发挥,最后千万不要忘了执行完后callback,因为如果没有的话就会阻塞了,async并不知道他限制的函数是否执行完毕,因此不会释放掉。

    总结

    至此呢,Nodejs爬虫的核心就已经介绍完毕了,剩下就完全可以自由发挥了,最后附上一个自己做的简单的新浪微博的爬虫吧https://github.com/Fazich/nodeSpider

    展开全文
  • pycharm + python 做爬虫

    千次阅读 2017-12-26 21:37:04
    pycharm做爬虫python3.5+bs4爬虫模块安装步骤: 首先,你要先进入pycharm的Project Interpreter界面,进入方法是:setting(ctrl+alt+s) ->Project Interpreter,Project Interpreter在具体的Project下。点击“+”...

    pycharm + python 做爬虫

    python3.5+bs4爬虫模块

    安装步骤:
    首先,你要先进入pycharm的Project Interpreter界面,进入方法是:setting(ctrl+alt+s) ->Project Interpreter,Project Interpreter在具体的Project下。

    点击“+”,输入beautifulsoup ,就可以找到你要安装的插件了。

    Python3的选择bs4进行安装,Python2的选择beautifulSoup。

    爬虫代码

    from bs4 import BeautifulSoup
    withopen(‘D:\\PycharmProjects\\web_parse\\the_blah.html’,’r’) as wb_data: //这里打开本地文件需要双斜杠
    Soup = BeautifulSoup(wb_data,’lxml’)
    images = Soup.select(‘body > div.main-content > ul > li > img’)
    引用块内容
    print(Soup)

    python版本3.5 报错结果:bs4.FeatureNotFound: Couldn’t find a tree builder with the features you requested: lxml. Do you need to install a parser library?
    解决办法:安装lxml

    重新安装lxml和bs4仍然报错。
    补充:
    已解决问题,缺少libxslt。
    brew install libxslt

    web_parse.py

    from bs4 import BeautifulSoup
    with open(‘D:\PycharmProjects\code_of_video1_2\web\new_index.html’,’r’) as wb_data:
    Soup = BeautifulSoup(wb_data,’lxml’)
    images = Soup.select(‘body > div.main-content > ul > li > img’)
    titles = Soup.select(‘body > div.main-content > ul > li > div.article-info > h3 > a’)
    descs = Soup.select(‘body > div.main-content > ul > li > div.article-info > p.description’)
    cates = Soup.select(‘body > div.main-content > ul > li > div.article-info > p.meta-info’)
    rates = Soup.select(‘body > div.main-content > ul > li > div.rate > span’)
    #print(images,titles,descs,cates,rates,sep=’\n————\n’)
    #print(cates)
    info=[]#定义info list;
    for title,image,desc,rate,cate in zip(titles,images,descs,rates,cates):
    data = {
    ‘title’:title.get_text(),
    ‘rate’ :rate.get_text(),
    ‘desc’ :desc.get_text(),
    ‘cate’ :list(cate.stripped_strings),#列表化
    ‘image’:image.get(‘src’)
    }
    info.append(data)
    ”’提取评分大于 3,输出‘title’和‘cate”’
    for i in info:
    if float(i[‘rate’])>3:
    print(i[‘title’],i[‘cate’])
    ”’body > div.main - content > ul > li: nth - child(1) > img/html/body/div[2]/ul/li[1]/img
    /html/body/div[2]/ul/li[1]/div[1]/h3/a
    body > div.main-content > ul > li:nth-child(1) > div.article-info > h3 > a
    print(Soup)”’

    提取评分大于 3,输出‘title’和‘cate
    输出

    Sardinia’s top 10 beaches [‘fun’, ‘Wow’]
    How to get tanned [‘butt’, ‘NSFW’]
    How to be an Aussie beach bum [‘sea’]

    展开全文
  • 目录 爬取数据的目的: 1.获取大量数据,用于做数据分析 ...可以用于做爬虫的程序语言 1.Python 2.PHP 3.JAVA 4.C/C++ 爬虫分类 1.通用网络爬虫(搜索引擎使用,遵守robots协议) 2.聚焦网...

    目录

    爬取数据的目的:

    1.获取大量数据,用于做数据分析

    2.公司项目的测试数据,公司业务所需数据

    企业获取数据的方式

    1.公司自有数据

    2.第三方数据平台购买(数据堂,贵阳大数据交易所)

    3.爬虫爬取数据

    可以用于做爬虫的程序语言

    1.Python

    2.PHP

    3.JAVA

    4.C/C++

    爬虫分类

    1.通用网络爬虫(搜索引擎使用,遵守robots协议)

    2.聚焦网络爬虫

    爬虫爬取数据的步骤

    1.确定需要爬取的URL地址

    2.由请求模块向URL地址发出请求,并获得响应

    3.从响应类容中获取数据

    4.数据分析和二次爬取


    爬取数据的目的:

    1.获取大量数据,用于做数据分析

    当公司想要开发一个新的项目,肯定需要做市场调研,这就需要大量的数据,可以从同类型项目历年来的数据爬取下来,把数据经过处理后得到可观的图表,从而预测项目开发后可能获得的收益。

    2.公司项目的测试数据,公司业务所需数据

    当公司开发了一个新项目或新模块,在没有测试数据的情况下,就会要求爬虫工程师去各大网站上爬取热点数据。比如开发了一个新闻网站,爬虫工程师就会去各大成熟的新闻网站上爬取实时的热点新闻,经过数据加工处理后发布到自己的新闻网站。然后再由测试工程师测试网站的网络负载量、流量、CPU负载等信息。

     

    企业获取数据的方式

    1.公司自有数据

    顾名思义,就是公司以往的数据,可能是纸质的,这时候需要将纸质数据录入到计算机中。也可能是公司数据库中的,只是没有经过加工处理。

    2.第三方数据平台购买(数据堂,贵阳大数据交易所)

    如果想要买到如房产,金融,医疗,消费,工业等数据,可以去一些比较正规的售卖数据的公司去购买。如数据堂和贵阳大数据交易所,当然,根据你想要数据的珍稀程度,价格也相对来说不菲。总而言之,在第三方平台购买数据是非常昂贵的。

    3.爬虫爬取数据

    当然,我们也可以通过爬虫工具来爬取数据,这样的方式相对来说较为廉价,也更加灵活,缺点也比较明显,首先是数据的来源和有效性不能保证,二是涉及某些违法的操作是不允许的,三是能否爬取到有价值的数据绝大程度上取决于该爬虫工程师的技术水平。公司里会设置这样的爬虫工程师岗位,专门来做数据的爬取,如果一个爬虫工程师一年的工资是20W,那么当公司去购买第三方数据的价格小于20W时,公司多半就不会设置爬虫工程师的岗位,当然,这也取决于公司的财力与规模,较成熟的公司一般都会设有爬虫工程师的岗位。

     

    可以用于做爬虫的程序语言

    1.Python

    请求模块,解析模块丰富成熟,拥有Scrapy网络爬虫框架

    2.PHP

    对多线程、异步支持不太好

    3.JAVA

    代码笨重,代码量大

    4.C/C++

    效率高,但是开发速度慢

     

    爬虫分类

    1.通用网络爬虫(搜索引擎使用,遵守robots协议)

    国内像百度,360,搜狐等公司,就是利用的爬虫来爬取页面,实际上我们几乎天天都在使用百度的搜索功能,那么实质上也是在使用网络爬虫来爬取数据,而这里的数据其实是我们想查看的某个网站的相关信息,或者某一类型网站的相关信息。

    robots协议:

    robots协议也叫robots.txt(统一小写)是一种存放于网站根目录下的ASCII编码的文本文件,它通常告诉网络搜索引擎的漫游器(又称网络蜘蛛),此网站中的哪些内容是不应被搜索引擎的漫游器获取的,哪些是可以被漫游器获取的。因为一些系统中的URL是大小写敏感的,所以robots.txt的文件名应统一为小写。robots.txt应放置于网站的根目录下。如果想单独定义搜索引擎的漫游器访问子目录时的行为,那么可以将自定的设置合并到根目录下的robots.txt,或者使用robots元数据(Metadata,又称元数据)。

    如淘宝网站的robots.txt:https://www.taobao.com/robots.txt

    robots协议并不是一个规范,而只是约定俗成的,所以并不能保证网站的隐私。

    2.聚焦网络爬虫

    聚焦网络爬虫就是自己写的爬虫程序,不需要遵守robots协议,你可以根据自己的想法来编写爬虫程序。

     

    爬虫爬取数据的步骤

    1.确定需要爬取的URL地址

    爬取数据的前提是获取URL地址,URL是统一资源定位符,它规定了某个页面(文件)存放在何处。只有获取了这个网页文件后,才可以对后续的数据进行爬取。

    2.由请求模块向URL地址发出请求,并获得响应

    委托相关语言的请求模块,模拟人的操作去发送请求。

    3.从响应类容中获取数据

    获得完数据后,保存到本地。得到的数据就是如图 下所示的。

    4.数据分析和二次爬取

    经过了前三步后,此时我们已经有整个网页的数据文件了,只不过数据的格式可能是不友好的。这时候就需要爬虫工程师对数据进行处理,按照编排的格式收集数据。在这个过程中,一个网页下面可能有其他的URL地址,如果需要进一步跟进(爬取),那么又会重复第二步到第四步去处理,如何循环(这个又叫做递归爬虫)。

    展开全文
  • 不再使用php做爬虫

    千次阅读 2016-03-12 08:00:51
    技术小白的反思在做爬虫之前自己纠结了些许,用什么做爬虫,当然听说过python在爬虫方面的璀璨事迹,但是又怕技术学的乱七八糟,目前就不打算学了,又加之最近学习php,就打算使用php,但是随之问题出现了。...
    技术小白的反思
    在做爬虫之前自己纠结了些许,用什么做爬虫,当然听说过python在爬虫方面的璀璨事迹,但是又怕技术学的乱七八糟,目前就不打算学了,又加之最近学习php,就打算使用php,但是随之问题出现了。。。单线程(当然php还是世界上最好的语言,我怕打,别喷我),所以还是使用java吧!
    
    展开全文
  • java做爬虫解决521错误

    千次阅读 2018-12-10 12:31:38
    最近做爬虫时碰到了521错误,500开头的都是服务器错误,521错误有很大可能是请求头参数不对,比如下面这个 这是错误的 这是正确的 就是这一堆东西可能有哪些少了或是错误,而在爬虫中遇到这个错误,又极大...
  • 用Python做爬虫有哪些优势?该怎么学好Python?除了人工智能和数据分析,Python最广为人知的应用当属爬虫。所谓爬虫,是指按照一定的规则,自动地抓取万维网信息的程序或者脚本。接下来千锋小编程就给大家来讲解一下...
  • 可以做爬虫的语言很多, 如php, java, c/c++, python等等… php 虽然是世界上最好的语言,但是他天生不是干这个的,而且对多线程, 异步高并发的支持并不是很好,爬虫是工具性程序,对速度和效率要求比较高 java ...
  • java使用ChromeDriver做爬虫时需要做代理,而好多网上的例子都用了 browser = new ChromeDriver(cap);这个方法,但这个方法每次都会启动一个新的浏览器,每次我都要重新登录,有没有好的办法动态设置代理呢? 伙计们...
  • 手把手教你做爬虫---基于NodeJs

    万次阅读 多人点赞 2016-03-07 16:56:54
    手把手教你做爬虫,基于NodeJs,适合新手操作
  • 【小白篇】从零学习scrapy做爬虫抓数据
  • 用Python做爬虫时,提取Excel数据

    千次阅读 2019-07-15 17:35:36
    最近做爬虫时,需要根据excel里的数据进行爬取,在此记录一下excel里的数据如何导入,代码如下: import xlrd data = xlrd.open_workbook(r'此处为excel文件.xlsx') #默认当前路径 # 获取所有的sheet sheet_name =...
  • Julia也能做爬虫?可以,但没必要

    千次阅读 2019-03-11 09:23:58
    Julia也能做爬虫?可以,但没必要 https://mp.weixin.qq.com/s/_o0ktXNy4tNeRsM652vUTQ
  • 如图,我在做爬虫得时候前面登陆验证可以正常访问,但是访问第四个地址的时候正常应该给我返回cookie 我才能用返回得cookie去访问第五次地址。 图片是我fiddler抓包信息 第五次访问的时候不是在第四次response里获...
  • 爬虫系列——做爬虫必备:各大网站蜘蛛UA

    千次阅读 多人点赞 2019-08-10 09:30:28
    了解各大搜索引擎蜘蛛爬虫的UA,对我们进行某些程序编写十分有用,例如网页判断客户端来源时,UA是常用的标准之一。本文收集了各大搜索引擎的蜘蛛爬虫UA,以便需要时查阅。 1.百度蜘蛛Baiduspide...
  • 爬虫项目(二)用phantomjs做爬虫

    千次阅读 2017-02-11 00:10:14
    这几天有事没怎么研究,最开始用的java爬虫想爬取携程,结果失败告终。 主要表现在: 1.抓取不到对应的标签,jsoup语法对应的element个数是0,推测是因为直接用get方法获取机票信息时,该网站不显示和价格信息有关...
  • Selenimu做爬虫

    千次阅读 2012-10-31 22:49:45
    http://www.cnblogs.com/oscarxie/archive/2009/12/25/1631981.html ... 前面有介绍过Selenium作为开源的自动化测试框架,其实Selenium还可以作为爬虫工具。 举个例子,我想爬取中国概念股的一些
  • 1为链接爬虫添加缓存支持 2磁盘缓存 1用磁盘缓存的实现 2缓存测试 3节省磁盘空间 4清理过期数据 5用磁盘缓存的缺点 3数据库缓存 1NoSQL是什么 2安装MongoDB 3MongoDB概述 4MongoDB缓存实现 5压缩存储 6...
  • 使用SpringBoot + selenium-java 做爬虫

    千次阅读 2019-05-09 16:20:52
    题记 最近发现了springboot本身就集成了selenium-java ,就拿来研究了一下,分布式爬虫是很大的一个架构,也比较复杂,没研究,还是对爬虫的客户端实现有点兴趣,就想着用java一个小爬虫客户端,其实selenium是...
  • 每个人的时间是有限的,你的编程学得好,但是你唱歌跳舞也很好,总不可能白天当爱豆和蔡徐坤一起参加活动,晚上回公司项目吧?肯定只能选一个作为你主要的工作,另一个就只能成为业余爱好。 爬虫绝不是表面的 ...
  • 在这幅图中我们可以很清晰地看到爬虫与反爬虫是如何进行斗智斗勇的。在学习使用爬虫时,我们制作出来的爬虫往往是在“裸奔”,非常的简单。简单低级的爬虫有一个很大的优点:速度快,伪装度低。如果你爬取的网站没有...
  • 爬虫是大数据时代不可或缺的数据获取手段,它是综合技术的应用体现。有取就有失,有攻就有防。开发者为了保护数据,不得已想出了很多办法来限制爬虫对数据的获取。WEB 网站的构成...
  • c# 做爬虫求大牛指点

    2020-08-12 16:05:51
    [img=... 想用c# 做爬虫大致分为以下模块(以csdn为例): 1.通过Url 获取页面各个元素里的数据; 2.可以点赞,收藏; 有没有大牛指点一下思路,或分享一下相关源码[face]monkey:14.gif[/face]
  • 做爬虫的可以看一下

    千次阅读 2018-06-05 12:14:09
    所谓爬虫,就是将目标网络资源通过自动化的方式获取并得到操作权。至于使用什么语言工具,那看你自己的爱好,但你选择的语言工具最好自带网络通信功能,否者你需要自己去封装很多这方面的功能模块,那就本末倒置了。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,350
精华内容 8,140
关键字:

做爬虫

爬虫 订阅