2020-05-07 10:06发布
一、Scrapy
二、PySpider
三、Crawley
四、Portia
五、newspaper
六、python-goose
七、Beautiful Soup
八、mechanize
九、selenium
十、cola
1,一个问题就是,爬虫是一个什么东西?为什么需要爬虫?
说白了,爬虫就是一个“机器人”。平常,我们从浏览器浏览网站,我们必须一页一页的打开,然后找到我们需要的内容。如果我们想保存网页中内容的话,也只有一页一页的浏览,然后Ctrl+C,再然后Ctrl+V。这样效率就特别慢,如果我们需要下载的东西有几百万的话,这是根本无法完成的了。
怎么办呢?我们能够想到的一个方法,就是,如果我们有一个机器人,伪装成一个浏览器,然后按照我们设定的规则,自动的打开网页,然后自动找到我们的内容,再然后自动的下载保存起来,那么不就OK了?是的,爬虫就是这么干的。
为什么需要那么{{BANNED}}的爬取那么多别人的内容?因为数据,现在是大数据和AI时代,如果做好AI,必须有足够的数据,当然,找到这些数据最好的方法就是采集已有的数据。
2,开发爬虫需要的预备知识
因此,如果你想写爬虫,你首先要对浏览器和服务器的原理要搞懂,否则,你怎么能够模拟一个浏览器机器人的?简单的说,浏览器,就是根据用户的操作,发送一个Request给服务器,服务器接收到这个Request,然后做一个处理,然后把处理的结果Response返回给浏览器,然后浏览器解析和渲染这个Response,呈现用户可见的图形或者文字。上面只是简单的说,真正展开了,这里的细节非常的多。这么多的工作,就是现在各种网络开发工程师,例如前端工程师和后端工程师等一直在煎熬的事情。爬虫要做的事情基本就是下面几个:第一,构造request,然后发送给服务器。第二,接受到respone,然后解析response,找到自己需要的内容第三,其它就是一些辅助功能,例如保持数据,保存到数据库等等嗯,看起来好像非常简单。
3,为什么选择python,框架Scrapy是个什么东西?
我们准备做一个项目,都面临一个语言选择的问题,语言选择一般遵循两种原则:第一,性能要求,这个是最基本的要求第二,开发的方便性,这个问题,取决于相关语言提供的内置或者外置的库的多少。所以,如果就写爬虫而言,python其实并不是唯一的选择,例如C或者Java都可以完成,但是Python却是一个最优的选择,因为很多人都在使用Python做爬虫,也贡献了非常多的爬虫相关的框架和模块。因此,如果你不想重复造轮子的话,使用Python做爬虫是一个非常不错的选择。
框架是一个什么玩意?如果不是几十年前的老工程师,估计都或多或少的接触框架,php、js、javaEE,等等对于开发网站等经常需要处理的工作,都会有很多流行的框架。所谓的框架,就是把很多工作进行流程化,然后让你需要自己定制的地方去定制,其它工作,框架都帮你写了,你不需要重复写那些所有人都需要写的部分了。就像盖房子,别人把土木,水电,安全等等全部给你搞定了,你所需要做的,就是定制你自己的厨房卫生间卧室等工作而已。Scrapy就是一个爬虫的框架,他把很多流程都固化了,你只要提供你所需要爬的网站地址,然后,就可以拿到respone,分析resopne,怎么保存数据等等,全部帮你搞好框架。如果没有框架呢?你需要负责跟踪请求和反馈的错综复杂的来往,你不花费巨大的精力和智力,可能无法写一个性能优良的服务前后端程序。框架就是这样的东西,规范工作流程,不容易犯错误,常用的代码都帮你写好了。
4,深入了解网络请求
开发爬虫的第一步,就是写所谓的请求,也就是就是构造一个类似于浏览器的数据,按照同样的方法发送给服务器,然后就等待接收服务器的返回了。几个问题需要明确:
第一,浏览器有哪些地方会发送请求?
第二,浏览器发送的数据有多少种,格式是什么样子?
关于第一个问题,浏览器有如下几个地方会发送请求:
1)地址栏,这个不要多说了。
2)form表单,就是网页上那种输入账号和密码的那种东西。
3)js语言,其中最著名的就是ajax。
关于第二个问题:
现在浏览器使用RESTful格式的请求,其实就是对于uri的增删改查操作,但是我们一般使用的还是GET和POST的方式最大。get最典型的就是浏览器地址栏发送的请求,而POST典型的就是form表单,而ajax对于GET和POST都有使用。
5,如何解析服务器返回的数据?
获取到response之后,我们接下来的重要任务就是分析其返回的内容了,response主要内容包括html网页(含js代码)和json数据两种类型。
对于html网页,其实非常复杂的,我们怎样从这样复杂的字符串流中找到我们感兴趣的内容呢?我们一般对其中内容文本、图片或者视频,或者引导到另外一个地址的网页链接等感兴趣。怎么找呢?
第一种方法,使用正则的方法,自己从中找到自己感兴趣的内容。哈哈,这很难的。
第二种方法,使用一个第三方工具,所谓的BeautifulSoup,这个工具在使用第三方分析器,把html转化成python的结构化数据,然后,我们可以使用数据结构的导航方法,找到我们感兴趣的内容。
第三种方法,就是直接使用xpath和jsonpath来直接分析返回的html和json数据。
6,js代码怎么处理?
现在浏览器,其实更像一个虚拟的操作系统+CPU,可以执行复杂的js指令。而上面讨论的request和response,都是假定了静态网页的方式,而实际应用中的网页,纯粹静态的很少,更多是动态网页,也就是网页中有交互的js代码,这个js代码根据实际情况,而产生和服务器的交互,决定继续从服务器加载需要的内容。
因此,我们需要模拟js执行的情况,这是一个比较大的问题,chrome的独占鳌头,就是因为它优化了js的执行问题。因此,我们能否直接操纵浏览器,例如chrome来帮我们加载动态页面呢?非常幸运,这个方法是有的,这是从网站自动化测试需求的一个东西,就是所谓的selenium。python支持这个。
python通过安装selenium,然后通过一个浏览器的驱动程序webdriver,进而控制浏览器。
7,爬虫和黑客什么区别和联系?以及爬虫未来的展望
总之,我们通过各种手段,伪造好像真人从服务器去拿数据,但是,很多网站也有使用很多方法去鉴别你是通过爬虫拿数据的,从而不给你数据,或者杀掉你的IP。所以,爬虫开发和反爬虫开发,就像小偷和警察一样的发展。
另外,爬虫开发和黑客什么关系?因为我们的目的是不择手段的去拿去数据,往往也走在了黑客的边缘,因为我们在分析网站的时候,往往会发现网站的漏洞,只是我们不去黑掉网站而已。这也说明了,如果你是一个资深黑客,一定对你开发爬虫有很大的帮助。
可以简单的展望,现在AI这么发达,未来我们其实完全没有必要开发复杂的爬虫,仅仅开发一个AI机器人,模拟人类的操作和保存数据(Ctrl+C和Ctrl+P),这样就行了。估计这样的机器人对于后台反扒工程师,估计更难分辨了。
一、ScrapyScrapy框架是一套比较成熟的Python爬虫框架,是使用Python开发的快速、高层次的信息爬取框架,可以高效的爬取web页面并提取出结构化数据。Scrapy应用范围很广,爬虫开发、数据挖掘、数据监测、自动化测试等。二、PySpider是国人用python编写的一个功能强大的网络爬虫框架。主要特性如下:1、强大的WebUI,包含:脚本编辑器、任务监控器,项目管理器和结果查看器;2、多数据库支持,包括:MySQL, MongoDB, Redis, SQLite, Elasticsearch; PostgreSQL with SQLAlchemy等;3、使用RabbitMQ, Beanstalk, Redis 和Kombu作为消息队列;4、支持任务优先级设定、定时任务、失败后重试等;5、支持分布式爬虫三、Crawley高速爬取对应网站的内容,支持关系和非关系数据库,数据可以导出为JSON、XML等相关推荐:《python视频教程》四、Portia可视化爬取网页内容五、newspaper提取新闻、文章以及内容分析六、python-goosejava写的文章提取工具七、Beautiful Soup名气大,整合了一些常用爬虫需求。缺点:不能加载JS。Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时甚至数天的工作时间。这个我是使用的特别频繁的。在获取html元素,都是bs4完成的。八、mechanize优点:可以加载JS。缺点:文档严重缺失。不过通过官方的example以及人肉尝试的方法,还是勉强能用的。九、selenium这是一个调用浏览器的driver,通过这个库你可以直接调用浏览器完成某些操作,比如输入验证码。十、cola一个分布式爬虫框架。项目整体设计有点糟,模块间耦合度较高。
网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
框架有:Scrapy、PySpider、Crawley等
为什么最终选择Python?
跨平台,对Linux和windows都有不错的支持。
科学计算,数值拟合:Numpy,Scipy
可视化:2d:Matplotlib(做图很漂亮), 3d: Mayavi2
复杂网络:Networkx
统计:与R语言接口:Rpy
交互式终端
网站的快速开发
(1)爬虫框架或模块
Python自带爬虫模块:urllib、urllib2 ;
第三方爬虫模块:requests,aiohttp;
爬虫框架: Scrapy、pyspider。
(2)爬虫框架或模块的优缺点
urllib和urllib2模块都用于请求URL相关的操作,但他们提供了不同的功能。urllib2模块中urllib2.urlopen可以接受一个Request对象或者url,(在接受Request对象时候,并以此可以来设置一个URL 的headers),且只接收一个url;urllib中有urlencode,而urllib2中没有。因此,开发人员在实际开发中经常会将urllib与urllib2一起使用。
requests是一个HTTP库, 它仅仅用于发送请求。对于HTTP请求而言,request是一个强大的库,可以自己处理下载、解析,灵活性更高,高并发与分布式部署也非常灵活,对于功能可以更好实现。
aiohttp是一个基于python3的asyncio携程机制实现的一个http库。相比requests,aiohttp自身就具备了异步功能。但只能在python3环境中使用。
Scrapy是封装起来的框架,它包含了下载器、解析器、日志及异常处理,是基于多线程的,采用twisted的方式处理。对于固定单个网站的爬取开发,Scrapy具有优势;对于多网站爬取,并发及分布式处理方面,Scrapy不够灵活,不便调整与扩展。
Scrapy具有以下优点:
·Scrapy是异步的;
·采取可读性更强的XPath代替正则表达式;
·强大的统计和log 系统;
·可同时在不同的URL上爬行;
·支持shell方式,方便独立调试;
·方便写一些统一的过滤器;
·通过管道的方式存入数据库。
Scrapy是基于python实现的爬虫框架,扩展性比较差。
Pyspider是一个重量级的爬虫框架。我们知道Scrapy没有数据库集成、分布式、断点续爬的支持、UI控制界面等等,若Scrapy想要实现这些功能,需要自行开发。Pyspider已经集成了前面这些功能,也正因如此,Pyspider的扩展性太差,学习难度较大。
1、Python标准库——urllib模块
功能:打开URL和http协议之类
实例代码:#coding:utf-8
import urllib.request
import time
import platform
#清屏函数(无关紧要 可以不写)
def clear():
print(u"内容过多 3秒后清屏")
time.sleep(3)
OS = platform.system()
if (OS == u'Windows'):
os.system('cls')
else:
os.system('clear')
#访问函数
def linkbaidu():
url = ''
try:
response = urllib.request.urlopen(url,timeout=3)
except urllib.URLError:
print(u'网络地址错误')
exit()
with open('/home/ifeng/PycharmProjects/pachong/study/baidu.txt','w') as fp:
fp.write(response.read())
print(u'获取url信息,response.geturl()\n:%s'%response.getrul())
print(u'获取返回代码,response.getcode()\n:%s' % response.getcode())
print(u'获取返回信息,response.info()\n:%s' % response.info())
print(u"获取的网页信息经存与baidu.txt")
if __name__ =='main':
linkbaidu()
2、Python标准库–logging模块
logging模块能够代替print函数的功能,将标准输出到日志文件保存起来,利用loggin模块可以部分替代debug
3、re模块
正则表达式
4、sys模块
系统相关模块
实际应用:
sys.argv(返回一个列表,包含所有的命令行)
sys.exit(退出程序)
5、Scrapy框架
Django: Python Web应用开发框架
Django 应该是最出名的Python框架,GAE甚至Erlang都有框架受它影响。Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构、以及全功能的管理后台。
Diesel:基于Greenlet的事件I/O框架
Diesel提供一个整洁的API来编写网络客户端和服务器。支持TCP和UDP。
Flask:一个用Python编写的轻量级Web应用框架
Flask是一个使用Python编写的轻量级Web应用框架。基于Werkzeug WSGI工具箱和Jinja2
模板引擎。Flask也被称为“microframework”,因为它使用简单的核心,用extension增加其他功能。Flask没有默认使用的数
据库、窗体验证工具。
Cubes:轻量级Python OLAP框架
Cubes是一个轻量级Python框架,包含OLAP、多维数据分析和浏览聚合数据(aggregated data)等工具。
Kartograph.py
:创造矢量地图的轻量级Python框架
Kartograph是一个Python库,用来为ESRI生成SVG地图。Kartograph.py
目前仍处于beta阶段,你可以在virtualenv环境下来测试。
Pulsar:Python的事件驱动并发框架
Pulsar是一个事件驱动的并发框架,有了pulsar,你可以写出在不同进程或线程中运行一个或多个活动的异步服务器。
Web2py:全栈式Web框架
Web2py是一个为Python语言提供的全功能Web应用框架,旨在敏捷快速的开发Web应用,具有快速、安全以及可移植的数据库驱动的应用,兼容Google App Engine。
Falcon:构建云API和网络应用后端的高性能Python框架
Falcon是一个构建云API的高性能Python框架,它鼓励使用REST架构风格,尽可能以最少的力气做最多的事情。
Dpark:Python版的Spark
DPark是Spark的Python克隆,是一个Python实现的分布式计算框架,可以非常方便地实现大规模数据处理和迭代计算。DPark由豆瓣实现,目前豆瓣内部的绝大多数数据分析都使用DPark完成,正日趋完善。
Buildbot:基于Python的持续集成测试框架
Buildbot是一个开源框架,可以自动化软件构建、测试和发布等过程。每当代码有改变,服务器要求不同平台上的客户端立即进行代码构建和测试,收集并报告不同平台的构建和测试结果。
Zerorpc:基于ZeroMQ的高性能分布式RPC框架
Zerorpc是一个基于ZeroMQ和MessagePack开发的远程过程调用协议(RPC)实现。和 Zerorpc 一起使用的 Service API 被称为 zeroservice。Zerorpc 可以通过编程或命令行方式调用。
Bottle: 微型Python Web框架
Bottle是一个简单高效的遵循WSGI的微型python Web框架。说微型,是因为它只有一个文件,除Python标准库外,它不依赖于任何第三方模块。
Tornado:异步非阻塞IO的Python Web框架
Tornado的全称是Torado Web Server,从名字上看就可知道它可以用作Web服务器,但同时它也是一个Python Web的开发框架。最初是在FriendFeed公司的网站上使用,FaceBook收购了之后便开源了出来。
webpy: 轻量级的Python Web框架
webpy的设计理念力求精简(Keep it simple and powerful),源码很简短,只提供一个框架所必须的东西,不依赖大量的第三方模块,它没有URL路由、没有模板也没有数据库的访问。
Scrapy:Python的爬虫框架
Scrapy是一个使用Python编写的,轻量级的,简单轻巧,并且使用起来非常的方便。
在python中列表(list)是使用最频繁的数据类型,在其他语言中通常叫做数组。列表由一系列按特定顺序排列的元素组成。你可以创建包含字母表中所有字母、数字0~9或所有家庭成员姓名的列表;也可以将任何东西加入列表中,其中的元素之间可以没有任何关系。...
简单来讲,爬虫就是一个探测机器,它的基本操作就是模拟人的行为去各个网站溜达,点点按钮,查查数据,或者把看到的信息背回来。就像一只虫子在一幢楼里不知疲倦地爬来爬去。...
因为Python可以做数据分析 数据挖掘,数据挖掘的话简单来说就是爬虫工程师
1)学习爬虫,可以私人订制一个搜索引擎,并且可以对搜索引擎的数据采集工作原理进行更深层次地理解。有的朋友希望能够深层次地了解搜索引擎的爬虫工作原理,或者希望自己能够开发出一款私人搜索引擎,那么此时,学习爬虫是非常有必要的。简单来说,我们学会了...
大部分数据都是可以爬的,不过有些网站对数据的加密做的非常好,在解析的过程中要消耗很长的时间。
抓取数据,进行统计和分析
在成都找网络爬虫工作也是可以的,自己可以先到招聘软件上看看当地招聘的需求量以及薪资待遇水平怎么样,要是能达到自己的预期效果可以在当地工作,要不可以到北上广深找工作,就业机会能更多些。...
两种方式,一种是MySQL自带的命令行窗口,一种是图形用户管理工具,前者类似于一个cmd窗口,日常管理维护数据库不是很方便,后者就是一个图形用户管理软件,种类繁多,使用起来也相对容易一些...
不可以所有编程最起码都得学函数,分支,循环之后才可以编写代码
一台主机 多台从机
一、分布式爬虫架构在了解分布式爬虫架构之前,首先回顾一下Scrapy的架构,如下图所示。Scrapy单机爬虫中有一个本地爬取队列Queue,这个队列是利用deque模块实现的。如果新的Request生成就会放到队列里面,随后Request被Scheduler调度。之后,Request交给Down...
代理ip网址http://www.goubanjia.com/http://www.ip181.com/https://www.kuaidaili.com/python 环境安装requests库安装bs4库proxies设置代理服务器地址proxies = {'http': 'http://61.155.164.110:3128'}http://www.goub......
import requestsimport jsonfrom bs4 import BeautifulSoupfrom urllib.request import urlretrieve#构造函数def sk(): #请求头 header={ 'user-Agent':'Mozilla/5.0 (Windows NT 10.0; W...
针对字符串中本身含有双引号,我们可以利用单引号进行字符串的定义来解决这个问题。使用单引号作为字符串的界限就不会引起识别异常问题,保证字符串的合理定义
要用unicode编码来替换。
最多设置5个标签!
一、Scrapy
二、PySpider
三、Crawley
四、Portia
五、newspaper
六、python-goose
七、Beautiful Soup
八、mechanize
九、selenium
十、cola
1,一个问题就是,爬虫是一个什么东西?为什么需要爬虫?
说白了,爬虫就是一个“机器人”。平常,我们从浏览器浏览网站,我们必须一页一页的打开,然后找到我们需要的内容。如果我们想保存网页中内容的话,也只有一页一页的浏览,然后Ctrl+C,再然后Ctrl+V。这样效率就特别慢,如果我们需要下载的东西有几百万的话,这是根本无法完成的了。
怎么办呢?我们能够想到的一个方法,就是,如果我们有一个机器人,伪装成一个浏览器,然后按照我们设定的规则,自动的打开网页,然后自动找到我们的内容,再然后自动的下载保存起来,那么不就OK了?是的,爬虫就是这么干的。
为什么需要那么{{BANNED}}的爬取那么多别人的内容?因为数据,现在是大数据和AI时代,如果做好AI,必须有足够的数据,当然,找到这些数据最好的方法就是采集已有的数据。
2,开发爬虫需要的预备知识
因此,如果你想写爬虫,你首先要对浏览器和服务器的原理要搞懂,否则,你怎么能够模拟一个浏览器机器人的?简单的说,浏览器,就是根据用户的操作,发送一个Request给服务器,服务器接收到这个Request,然后做一个处理,然后把处理的结果Response返回给浏览器,然后浏览器解析和渲染这个Response,呈现用户可见的图形或者文字。上面只是简单的说,真正展开了,这里的细节非常的多。这么多的工作,就是现在各种网络开发工程师,例如前端工程师和后端工程师等一直在煎熬的事情。爬虫要做的事情基本就是下面几个:第一,构造request,然后发送给服务器。第二,接受到respone,然后解析response,找到自己需要的内容第三,其它就是一些辅助功能,例如保持数据,保存到数据库等等嗯,看起来好像非常简单。
3,为什么选择python,框架Scrapy是个什么东西?
我们准备做一个项目,都面临一个语言选择的问题,语言选择一般遵循两种原则:第一,性能要求,这个是最基本的要求第二,开发的方便性,这个问题,取决于相关语言提供的内置或者外置的库的多少。所以,如果就写爬虫而言,python其实并不是唯一的选择,例如C或者Java都可以完成,但是Python却是一个最优的选择,因为很多人都在使用Python做爬虫,也贡献了非常多的爬虫相关的框架和模块。因此,如果你不想重复造轮子的话,使用Python做爬虫是一个非常不错的选择。
框架是一个什么玩意?如果不是几十年前的老工程师,估计都或多或少的接触框架,php、js、javaEE,等等对于开发网站等经常需要处理的工作,都会有很多流行的框架。所谓的框架,就是把很多工作进行流程化,然后让你需要自己定制的地方去定制,其它工作,框架都帮你写了,你不需要重复写那些所有人都需要写的部分了。就像盖房子,别人把土木,水电,安全等等全部给你搞定了,你所需要做的,就是定制你自己的厨房卫生间卧室等工作而已。Scrapy就是一个爬虫的框架,他把很多流程都固化了,你只要提供你所需要爬的网站地址,然后,就可以拿到respone,分析resopne,怎么保存数据等等,全部帮你搞好框架。如果没有框架呢?你需要负责跟踪请求和反馈的错综复杂的来往,你不花费巨大的精力和智力,可能无法写一个性能优良的服务前后端程序。框架就是这样的东西,规范工作流程,不容易犯错误,常用的代码都帮你写好了。
4,深入了解网络请求
开发爬虫的第一步,就是写所谓的请求,也就是就是构造一个类似于浏览器的数据,按照同样的方法发送给服务器,然后就等待接收服务器的返回了。几个问题需要明确:
第一,浏览器有哪些地方会发送请求?
第二,浏览器发送的数据有多少种,格式是什么样子?
关于第一个问题,浏览器有如下几个地方会发送请求:
1)地址栏,这个不要多说了。
2)form表单,就是网页上那种输入账号和密码的那种东西。
3)js语言,其中最著名的就是ajax。
关于第二个问题:
现在浏览器使用RESTful格式的请求,其实就是对于uri的增删改查操作,但是我们一般使用的还是GET和POST的方式最大。get最典型的就是浏览器地址栏发送的请求,而POST典型的就是form表单,而ajax对于GET和POST都有使用。
5,如何解析服务器返回的数据?
获取到response之后,我们接下来的重要任务就是分析其返回的内容了,response主要内容包括html网页(含js代码)和json数据两种类型。
对于html网页,其实非常复杂的,我们怎样从这样复杂的字符串流中找到我们感兴趣的内容呢?我们一般对其中内容文本、图片或者视频,或者引导到另外一个地址的网页链接等感兴趣。怎么找呢?
第一种方法,使用正则的方法,自己从中找到自己感兴趣的内容。哈哈,这很难的。
第二种方法,使用一个第三方工具,所谓的BeautifulSoup,这个工具在使用第三方分析器,把html转化成python的结构化数据,然后,我们可以使用数据结构的导航方法,找到我们感兴趣的内容。
第三种方法,就是直接使用xpath和jsonpath来直接分析返回的html和json数据。
6,js代码怎么处理?
现在浏览器,其实更像一个虚拟的操作系统+CPU,可以执行复杂的js指令。而上面讨论的request和response,都是假定了静态网页的方式,而实际应用中的网页,纯粹静态的很少,更多是动态网页,也就是网页中有交互的js代码,这个js代码根据实际情况,而产生和服务器的交互,决定继续从服务器加载需要的内容。
因此,我们需要模拟js执行的情况,这是一个比较大的问题,chrome的独占鳌头,就是因为它优化了js的执行问题。因此,我们能否直接操纵浏览器,例如chrome来帮我们加载动态页面呢?非常幸运,这个方法是有的,这是从网站自动化测试需求的一个东西,就是所谓的selenium。python支持这个。
python通过安装selenium,然后通过一个浏览器的驱动程序webdriver,进而控制浏览器。
7,爬虫和黑客什么区别和联系?以及爬虫未来的展望
总之,我们通过各种手段,伪造好像真人从服务器去拿数据,但是,很多网站也有使用很多方法去鉴别你是通过爬虫拿数据的,从而不给你数据,或者杀掉你的IP。所以,爬虫开发和反爬虫开发,就像小偷和警察一样的发展。
另外,爬虫开发和黑客什么关系?因为我们的目的是不择手段的去拿去数据,往往也走在了黑客的边缘,因为我们在分析网站的时候,往往会发现网站的漏洞,只是我们不去黑掉网站而已。这也说明了,如果你是一个资深黑客,一定对你开发爬虫有很大的帮助。
可以简单的展望,现在AI这么发达,未来我们其实完全没有必要开发复杂的爬虫,仅仅开发一个AI机器人,模拟人类的操作和保存数据(Ctrl+C和Ctrl+P),这样就行了。估计这样的机器人对于后台反扒工程师,估计更难分辨了。
一、Scrapy
Scrapy框架是一套比较成熟的Python爬虫框架,是使用Python开发的快速、高层次的信息爬取框架,可以高效的爬取web页面并提取出结构化数据。
Scrapy应用范围很广,爬虫开发、数据挖掘、数据监测、自动化测试等。
二、PySpider
是国人用python编写的一个功能强大的网络爬虫框架。主要特性如下:
1、强大的WebUI,包含:脚本编辑器、任务监控器,项目管理器和结果查看器;
2、多数据库支持,包括:MySQL, MongoDB, Redis, SQLite, Elasticsearch; PostgreSQL with SQLAlchemy等;
3、使用RabbitMQ, Beanstalk, Redis 和Kombu作为消息队列;
4、支持任务优先级设定、定时任务、失败后重试等;
5、支持分布式爬虫
三、Crawley
高速爬取对应网站的内容,支持关系和非关系数据库,数据可以导出为JSON、XML等
相关推荐:《python视频教程》
四、Portia
可视化爬取网页内容
五、newspaper
提取新闻、文章以及内容分析
六、python-goose
java写的文章提取工具
七、Beautiful Soup
名气大,整合了一些常用爬虫需求。缺点:不能加载JS。
Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时甚至数天的工作时间。这个我是使用的特别频繁的。在获取html元素,都是bs4完成的。
八、mechanize
优点:可以加载JS。缺点:文档严重缺失。不过通过官方的example以及人肉尝试的方法,还是勉强能用的。
九、selenium
这是一个调用浏览器的driver,通过这个库你可以直接调用浏览器完成某些操作,比如输入验证码。
十、cola
一个分布式爬虫框架。项目整体设计有点糟,模块间耦合度较高。
网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
框架有:Scrapy、PySpider、Crawley等
为什么最终选择Python?
跨平台,对Linux和windows都有不错的支持。
科学计算,数值拟合:Numpy,Scipy
可视化:2d:Matplotlib(做图很漂亮), 3d: Mayavi2
复杂网络:Networkx
统计:与R语言接口:Rpy
交互式终端
网站的快速开发
(1)爬虫框架或模块
Python自带爬虫模块:urllib、urllib2 ;
第三方爬虫模块:requests,aiohttp;
爬虫框架: Scrapy、pyspider。
(2)爬虫框架或模块的优缺点
urllib和urllib2模块都用于请求URL相关的操作,但他们提供了不同的功能。urllib2模块中urllib2.urlopen可以接受一个Request对象或者url,(在接受Request对象时候,并以此可以来设置一个URL 的headers),且只接收一个url;urllib中有urlencode,而urllib2中没有。因此,开发人员在实际开发中经常会将urllib与urllib2一起使用。
requests是一个HTTP库, 它仅仅用于发送请求。对于HTTP请求而言,request是一个强大的库,可以自己处理下载、解析,灵活性更高,高并发与分布式部署也非常灵活,对于功能可以更好实现。
aiohttp是一个基于python3的asyncio携程机制实现的一个http库。相比requests,aiohttp自身就具备了异步功能。但只能在python3环境中使用。
Scrapy是封装起来的框架,它包含了下载器、解析器、日志及异常处理,是基于多线程的,采用twisted的方式处理。对于固定单个网站的爬取开发,Scrapy具有优势;对于多网站爬取,并发及分布式处理方面,Scrapy不够灵活,不便调整与扩展。
Scrapy具有以下优点:
·Scrapy是异步的;
·采取可读性更强的XPath代替正则表达式;
·强大的统计和log 系统;
·可同时在不同的URL上爬行;
·支持shell方式,方便独立调试;
·方便写一些统一的过滤器;
·通过管道的方式存入数据库。
Scrapy是基于python实现的爬虫框架,扩展性比较差。
Pyspider是一个重量级的爬虫框架。我们知道Scrapy没有数据库集成、分布式、断点续爬的支持、UI控制界面等等,若Scrapy想要实现这些功能,需要自行开发。Pyspider已经集成了前面这些功能,也正因如此,Pyspider的扩展性太差,学习难度较大。
1、Python标准库——urllib模块
功能:打开URL和http协议之类
实例代码:#coding:utf-8
import urllib.request
import time
import platform
#清屏函数(无关紧要 可以不写)
def clear():
print(u"内容过多 3秒后清屏")
time.sleep(3)
OS = platform.system()
if (OS == u'Windows'):
os.system('cls')
else:
os.system('clear')
#访问函数
def linkbaidu():
url = ''
try:
response = urllib.request.urlopen(url,timeout=3)
except urllib.URLError:
print(u'网络地址错误')
exit()
with open('/home/ifeng/PycharmProjects/pachong/study/baidu.txt','w') as fp:
response = urllib.request.urlopen(url,timeout=3)
fp.write(response.read())
print(u'获取url信息,response.geturl()\n:%s'%response.getrul())
print(u'获取返回代码,response.getcode()\n:%s' % response.getcode())
print(u'获取返回信息,response.info()\n:%s' % response.info())
print(u"获取的网页信息经存与baidu.txt")
if __name__ =='main':
linkbaidu()
2、Python标准库–logging模块
logging模块能够代替print函数的功能,将标准输出到日志文件保存起来,利用loggin模块可以部分替代debug
3、re模块
正则表达式
4、sys模块
系统相关模块
实际应用:
sys.argv(返回一个列表,包含所有的命令行)
sys.exit(退出程序)
5、Scrapy框架
Django: Python Web应用开发框架
Django 应该是最出名的Python框架,GAE甚至Erlang都有框架受它影响。Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构、以及全功能的管理后台。
Diesel:基于Greenlet的事件I/O框架
Diesel提供一个整洁的API来编写网络客户端和服务器。支持TCP和UDP。
Flask:一个用Python编写的轻量级Web应用框架
Flask是一个使用Python编写的轻量级Web应用框架。基于Werkzeug WSGI工具箱和Jinja2
模板引擎。Flask也被称为“microframework”,因为它使用简单的核心,用extension增加其他功能。Flask没有默认使用的数
据库、窗体验证工具。
Cubes:轻量级Python OLAP框架
Cubes是一个轻量级Python框架,包含OLAP、多维数据分析和浏览聚合数据(aggregated data)等工具。
Kartograph.py
:创造矢量地图的轻量级Python框架
Kartograph是一个Python库,用来为ESRI生成SVG地图。Kartograph.py
目前仍处于beta阶段,你可以在virtualenv环境下来测试。
Pulsar:Python的事件驱动并发框架
Pulsar是一个事件驱动的并发框架,有了pulsar,你可以写出在不同进程或线程中运行一个或多个活动的异步服务器。
Web2py:全栈式Web框架
Web2py是一个为Python语言提供的全功能Web应用框架,旨在敏捷快速的开发Web应用,具有快速、安全以及可移植的数据库驱动的应用,兼容Google App Engine。
Falcon:构建云API和网络应用后端的高性能Python框架
Falcon是一个构建云API的高性能Python框架,它鼓励使用REST架构风格,尽可能以最少的力气做最多的事情。
Dpark:Python版的Spark
DPark是Spark的Python克隆,是一个Python实现的分布式计算框架,可以非常方便地实现大规模数据处理和迭代计算。DPark由豆瓣实现,目前豆瓣内部的绝大多数数据分析都使用DPark完成,正日趋完善。
Buildbot:基于Python的持续集成测试框架
Buildbot是一个开源框架,可以自动化软件构建、测试和发布等过程。每当代码有改变,服务器要求不同平台上的客户端立即进行代码构建和测试,收集并报告不同平台的构建和测试结果。
Zerorpc:基于ZeroMQ的高性能分布式RPC框架
Zerorpc是一个基于ZeroMQ和MessagePack开发的远程过程调用协议(RPC)实现。和 Zerorpc 一起使用的 Service API 被称为 zeroservice。Zerorpc 可以通过编程或命令行方式调用。
Bottle: 微型Python Web框架
Bottle是一个简单高效的遵循WSGI的微型python Web框架。说微型,是因为它只有一个文件,除Python标准库外,它不依赖于任何第三方模块。
Tornado:异步非阻塞IO的Python Web框架
Tornado的全称是Torado Web Server,从名字上看就可知道它可以用作Web服务器,但同时它也是一个Python Web的开发框架。最初是在FriendFeed公司的网站上使用,FaceBook收购了之后便开源了出来。
webpy: 轻量级的Python Web框架
webpy的设计理念力求精简(Keep it simple and powerful),源码很简短,只提供一个框架所必须的东西,不依赖大量的第三方模块,它没有URL路由、没有模板也没有数据库的访问。
Scrapy:Python的爬虫框架
Scrapy是一个使用Python编写的,轻量级的,简单轻巧,并且使用起来非常的方便。
相关问题推荐
在python中列表(list)是使用最频繁的数据类型,在其他语言中通常叫做数组。列表由一系列按特定顺序排列的元素组成。你可以创建包含字母表中所有字母、数字0~9或所有家庭成员姓名的列表;也可以将任何东西加入列表中,其中的元素之间可以没有任何关系。...
简单来讲,爬虫就是一个探测机器,它的基本操作就是模拟人的行为去各个网站溜达,点点按钮,查查数据,或者把看到的信息背回来。就像一只虫子在一幢楼里不知疲倦地爬来爬去。...
因为Python可以做数据分析 数据挖掘,数据挖掘的话简单来说就是爬虫工程师
1)学习爬虫,可以私人订制一个搜索引擎,并且可以对搜索引擎的数据采集工作原理进行更深层次地理解。有的朋友希望能够深层次地了解搜索引擎的爬虫工作原理,或者希望自己能够开发出一款私人搜索引擎,那么此时,学习爬虫是非常有必要的。简单来说,我们学会了...
大部分数据都是可以爬的,不过有些网站对数据的加密做的非常好,在解析的过程中要消耗很长的时间。
抓取数据,进行统计和分析
在成都找网络爬虫工作也是可以的,自己可以先到招聘软件上看看当地招聘的需求量以及薪资待遇水平怎么样,要是能达到自己的预期效果可以在当地工作,要不可以到北上广深找工作,就业机会能更多些。...
两种方式,一种是MySQL自带的命令行窗口,一种是图形用户管理工具,前者类似于一个cmd窗口,日常管理维护数据库不是很方便,后者就是一个图形用户管理软件,种类繁多,使用起来也相对容易一些...
不可以所有编程最起码都得学函数,分支,循环之后才可以编写代码
一台主机 多台从机
一、分布式爬虫架构在了解分布式爬虫架构之前,首先回顾一下Scrapy的架构,如下图所示。Scrapy单机爬虫中有一个本地爬取队列Queue,这个队列是利用deque模块实现的。如果新的Request生成就会放到队列里面,随后Request被Scheduler调度。之后,Request交给Down...
代理ip网址http://www.goubanjia.com/http://www.ip181.com/https://www.kuaidaili.com/python 环境安装requests库安装bs4库proxies设置代理服务器地址proxies = {'http': 'http://61.155.164.110:3128'}http://www.goub......
import requestsimport jsonfrom bs4 import BeautifulSoupfrom urllib.request import urlretrieve#构造函数def sk(): #请求头 header={ 'user-Agent':'Mozilla/5.0 (Windows NT 10.0; W...
针对字符串中本身含有双引号,我们可以利用单引号进行字符串的定义来解决这个问题。使用单引号作为字符串的界限就不会引起识别异常问题,保证字符串的合理定义
要用unicode编码来替换。