betway必威-betway必威官方网站
做最好的网站

betway必威官方网站网络爬虫设计中需要注意的几

做网络爬虫是件很有意义的事情。首先,它可以是一个专门的职业。从公司层面讲,业务和战略可能都需要很多数据进行多维度分析,所以现在很多公司都有专门的爬虫工程师负责设计数据采集系统;其次,很多公司以爬虫为生,爬虫就是他们用来赚取利润的最主要手段,比如说各大搜索引擎和最近比较流行的即刻 APP;最后,爬虫也可以成为程序员业余时间赚取外快的好玩具,很多社群找程序员兼职爬取目标数据;最不济,它还可以成为一个好玩具,程序员可以抓取一些好玩的图片和文章,做一个自己喜爱的 Side Project。

一、"大数据时代",数据获取的方式:

1. 企业生产的用户数据:大型互联网公司有海量用户,所以他们积累数据有天然的优势。
                有数据意识的中小型企业,也开始积累的数据。

2. 数据管理咨询公司:通常这样的公司有很庞大的数据采集团队,一般会通过市场调研、问卷调查、固定的样本检测,
        和各行各业的公司进行合作、专家对话(数据积累很多年了,最后得出科研结果)来采集数据。

3. 政府/机构提供的公开数据:政府通过各地政府统计上报的数据进行合并;机构都是权威的第三方网站。

4. 第三方数据平台购买数据:通过各个数据交易平台来购买各行各业需要的数据,根据获取难度不同,价格也会不同。

5. 爬虫爬取数据:如果市场上没有我们需要的数据,或者价格太高不愿意买,那么就可以招/做一个爬虫工程师,从互联网上定向采集数据。

二、什么是爬虫?

爬虫:就是抓取网页数据的程序。

三、爬虫怎么抓取网页数据:

网页三大特征:

爬虫的设计思路:

四、为什么选择Python做爬虫?

可以做爬虫的语言有很多,如 PHP、Java、C/C 、Python等等...

  • PHP 虽然是世界上最好的语言,但是他天生不是干这个的,而且对多线程、异步支持不够好,并发处理能力很弱。
    爬虫是工具性程序,对速度和效率要求比较高。

  • Java 的网络爬虫生态圈也很完善,是Python爬虫最大的对手。但是Java语言本身很笨重,代码量很大。
    重构成本比较高,任何修改都会导致代码的大量变动。爬虫经常需要修改部分采集代码。

  • C/C 运行效率和性能几乎最强,但是学习成本很高,代码成型比较慢。
    能用C/C 做爬虫,只能说是能力的表现,但是不是正确的选择。

  • Python 语法优美、代码简洁、开发效率高、支持的模块多,相关的HTTP请求模块和HTML解析模块非常丰富。
    还有强大的爬虫Scrapy,以及成熟高效的 scrapy-redis分布式策略。
    而且,调用其他借口也非常方便(胶水语言)

五、课程介绍:

-5 Scrapy框架:(Scrapy,Pyspider)
高定制性高性能(异步网络框架twisted),所以数据下载速度非常快,
提供了数据存储、数据下载、提取规则等组件。

-6 分布式策略 scrapy-reids:
scrapy-redis,在Scrapy的基础上添加了一套以 Redis 数据库为核心的组件。
让Scrapy框架支持分布式的功能,主要在Redis里做 请求指纹去重、请求分配、数据临时存储。

-7 爬虫 - 反爬虫 - 反反爬虫 之间的斗争:
其实爬虫做到最后,最头疼的不是复杂的页面,也是晦涩的数据,而是网站另一边的反爬虫人员。

User-Agent、代理、验证码、动态数据加载、加密数据。

数据价值,是否值的去费劲做反爬虫。

1. 机器成本   人力成本 > 数据价值,就不反了,一般做到封IP就结束了。
2. 面子的战争....

爬虫和反爬虫之间的斗争,最后一定是爬虫获胜!
为什么?只要是真实用户可以浏览的网页数据,爬虫就一定能爬下来!

六、根据使用场景:分为 通用爬虫 聚焦爬虫

1.通用爬虫:搜索引擎用的爬虫系统。

-1目标:就是尽可能把互联网上所有的网页下载下来,放到本地服务器里形成备份,
再对这些网页做相关处理(提取关键字、去掉广告),最后提供一个用户检索接口。

-2抓取流程:
a) 首选选取一部分已有的URL,把这些URL放到待爬取队列。
b) 从队列里取出这些URL,然后解析DNS得到主机IP,然后去这个IP对应的服务器里下载HTML页面,保存到搜索引擎的本地服务器。
之后把这个爬过的URL放入已爬取队列。
c) 分析这些网页内容,找出网页里其他的URL连接,继续执行第二步,直到爬取条件结束。

-3 搜索引擎如何获取一个新网站的URL:
1. 主动向搜索引擎提交网址:http://zhanzhang.baidu.com/linksubmit/url

  1. 在其他网站里设置网站的外链。
  2. 搜索引擎会和DNS服务商进行合作,可以快速收录新的网站。

    DNS:就是把域名解析成IP的一种技术。

-4 通用爬虫并不是万物皆可爬,它也需要遵守规则:
Robots协议:协议会指明通用爬虫可以爬取网页的权限。
Robots.txt 只是一个建议。并不是所有爬虫都遵守,一般只有大型的搜索引擎爬虫才会遵守。
咱们个人写的爬虫,就不管了。

-5 通用爬虫工作流程:爬取网页 - 存储数据 - 内容处理 - 提供检索/排名服务

-6 搜索引擎排名:
1. PageRank值:根据网站的流量(点击量/浏览量/人气)统计,流量越高,网站也越值钱,排名越靠前。

  1. 竞价排名:谁给钱多,谁排名就高。

-7 通用爬虫的缺点:
1. 只能提供和文本相关的内容(HTML、Word、PDF)等等,但是不能提供多媒体文件(音乐、图片、视频)和二进制文件(程序、脚本)等等。

  1. 提供的结果千篇一律,不能针对不同背景领域的人提供不同的搜索结果。
  2. 不能理解人类语义上的检索。

为了解决这个问题,聚焦爬虫出现了:

聚焦爬虫:爬虫程序员写的针对某种内容的爬虫。
面向主题爬虫,面向需求爬虫:会针对某种特定的内容去爬取信息,而且会保证信息和需求尽可能相关。

Python自带的模块:/usr/lib/python2.7/urllib2.py
Python的第三方模块: /usr/local/lib/python2.7/site-packages

urllib2 默认的 User-Agent:Python-urllib/2.7

User-Agent: 是爬虫和反爬虫斗争的第一步,养成好习惯,发送请求带User-Agent

response 是服务器响应的类文件,除了支持文件操作的方法外,还支持以下常用的方法:

Python 语言

大部分人学 Python 都是作为第二语言来学的, 所以既然已经有了其它语言的基础, 我就推荐 2 个小而美的教程, 百页左右, 不啰嗦

  • 廖雪峰的 Python3 教程
  • A Byte of Python
    • 中文版 : 简明 Python 教程

先看完这 2 个教程其一, 就可以开始写 Python 了... 遇到不明确的地方再去详细了解, 比如 generator, yield

我是通过看「静觅」上的文章接触爬虫的。作者最近还写了本书「Python3网络爬虫开发实战 」,算是现在市面上比较系统的爬虫书籍了。我也写点东西总结一下做爬虫过程中遇到的主要问题,希望对没有接触过的同学有参考意义,也希望老鸟们帮忙看看路子是否正确。本文主要是为了厘清爬虫运行的思路,不会涉及太多的具体代码。

返回 HTTP的响应码,成功返回200,4服务器页面出错,5服务器问题

print response.getcode()

HTML & CSS & JS

w3school 是入门基础, 要用爬虫获取数据, 必须先了解 HTML 的结构

「网络爬虫」又叫网络蜘蛛,实际上就是一种自动化的网络机器人,代替了人工来获取网络上的信息。所以只要复原用户获取网络信息的步骤,就能够厘清爬虫运行的整个脉络。

返回 返回实际数据的实际URL,防止重定向问题

print response.geturl()

爬虫

网址管理

上网的时候,我先是输入一个网址:https://www.cnblogs.com/,服务器给我返回网页的结果,我碰到我感兴趣的文章就用鼠标拖动,浏览器会自动给我新建一个标签,一分钟以后,我就获取到了首页我需要的所有内容。我还有另外一种选择,当我碰到感兴趣的文章我就点进去,然后在文章里我又看到了更感兴趣的,我又点击进去,然后我再返回到首页看第二篇我感兴趣的文章。

betway必威官方网站 1

第一种策略称为「广度优先」,第二种策略称为「深度优先」。实际使用过程中一般是采用广度优先的策略。我们先从入口返回的数据中拿到我们感兴趣的 URL,放到一个列表中,每爬取完一个 URL,就把它放到已完成的列表中。对于异常的,另外作标记后续处理。

betway必威官方网站 2

实际上最简单的爬虫只作一件事:访问地址,获取数据。 当要访问的地址变得很多时,成立一个 URL 管理器,对所有需要处理的 URL 作标记。当逻辑不复杂的时候可以使用数组等数据结构,逻辑复杂的时候使用数据库进行存储。数据库记录有个好处是当程序意外挂掉以后,可以根据正在处理的 ID 号继续进行,而不需要重新开始,把之前已经处理过的 URL 再爬取一遍。以 Python3 为例,编写以下伪代码:

def main():
    root_url = 'https://www.cnblogs.com'
    res = get_content(root_url)
    first_floor_urls = get_wanted_urls(res)

    for url in first_floor_urls:
        res_url = get_content(url)
        if sth_wrong(res_url):
            put_to_error_list(url)
        else:
            sencond_floor_urls = get_wanted_urls(res_url)
    # rest of the code

if __name__ == '__main__':
    main()

返回 服务器响应的HTTP报头

print response.info()

User-Agent 历史:

Mosaic 世界上第一个浏览器:美国国家计算机应用中心

Netscape 网景:Netscape(支持框架),慢慢开始流行....(第一款支持框架的浏览器)

Microsoft 微软:Internet Explorer(也支持框架)

第一次浏览器大战:网景公司失败..消失

Mozilla 基金组织:Firefox 火狐 - (Gecko内核)(第一款浏览器内核)

User-Agent 决定用户的浏览器,为了获取更好的HTML页面效果。

IE开了个好头,大家都开就给自己披着了个 Mozilla 的外皮

Microsoft公司:IE(Trident)

Opera公司:Opera(Presto)

Mozilla基金会:Firefox(Gecko)

Linux组织:KHTML (like Gecko)

Apple公司:Webkit(like KHTML)

Google公司:Chrome(like webkit)

其他浏览器都是IE/Chrome内核

urllib 的 urlencode() 接收的参数是一个字典:
wd = {"wd" : "传智播客"}
urllib.urlencode(wd)

结果:wd=传智播客

Get 和 Post请求的区别:

Get : 请求的url会附带查询参数,
POST:请求的url不带参数

对于Get请求:查询参数在QueryString里保存
对于Post请求:查询参数在Form表单里保存

做爬虫最需要关注的不是页面信息,而是页面信息的数据来源。

AJAX 方式加载的页面,数据来源一定是JSON

拿到JSON,就是拿到了网页的数据

网站爬虫的大体思路是 :

  1. 模拟网站登录请求
  2. 网络请求获取网页源代码
  3. CSS selector 或 xpath 选定需要的元素, 获取内容属性等
  4. 结构化数据并存储到数据库
  5. 定时,并发执行爬虫
  • 关于 iOS 的爬虫, 可以参考我之前的文章 iOS 抓取 HTML ,CSS XPath 解析数据

什么语言可以做爬虫

虽然我会的语言不多,但是我相信任何语言,只要他具备访问网络的标准库,都可以很轻易的做到这一点。刚刚接触爬虫的时候,我总是纠结于用 Python 来做爬虫,现在想来大可不必,无论是 JAVA,PHP 还是其他更低级语言,都可以很方便的实现,静态语言可能更不容易出错,低级语言运行速度可能更快,Python 的优势在于库更丰富,框架更加成熟,但是对于新手来说,熟悉库和框架实际上也要花费不少时间。

比如我接触的 Scrapy,配环境就配了两天,对于里面复杂的结构更是云里雾里,后来我果断放弃了,任何爬虫我都只使用几个简单的库来实现,虽然耗费了很多时间,但是我对整个 HTTP 流程有了更深的理解。我认为:

在没有搞清楚设计优势的时候盲目的学习框架是阻碍技术进步的。

在我刚转行学习 Python 的那段时间,我每天都花很多时间在社区里去读那种比较 Flask,Django,Tornado 甚至是 Bottom,Sanic 这样的文章。这些文章很多都写得非常好,我也从中学到了很多知识,我知道了 Flask 胜在灵活,Django 更大更全面等等。

可是说真的,这浪费了我很多时间。新手总是有一种倾向,花费巨大的精力去寻找那些一劳永逸的方法,语言和框架,妄想只要学了这个,以后长时间就可以高枕无忧,面对各种挑战。如果要我重来一次,我会选择看一两篇这种优质的比较文章,然后大胆的选用其中一种主流的框架,在不重要的学习项目中尝试其他的框架,用了几次自然而然就会发现他们的优劣。

现在我还发现这种倾向不仅在新手中存在,老鸟也有很多患有这种技术焦虑症。他们看到媒体鼓吹 Go 语言和 Assembly,大家都在讨论微服务和 React Native,也不知所以的加入。但是有的人还是真心看懂了这些技术的优势,他们在合适的场景下进行试探性的尝试,然后步步为营,将这些新技术运用到了主要业务中,我真佩服这些人,他们不焦不燥热的引领着新技术,永远都不会被新技术推着走。

Python 爬虫

要写一个爬虫, 可以用一些基本的库, 也可以用爬虫框架 :

本文由betway必威发布于编程开发,转载请注明出处:betway必威官方网站网络爬虫设计中需要注意的几

TAG标签: betway必威
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。