爬虫
C-haidragon
我的视频学习地址:https://edu.csdn.net/lecturer/5805?spm=1003.2001.3001.4144
展开
-
案例:使用XPath的的爬虫
案例:使用XPath的爬虫现在我们用XPath来做一个简单的爬虫,我们尝试爬取某个贴吧里的所有帖子,并且将该这个帖子里每个楼层发布的图片下载到本地。# tieba_xpath.py#!/usr/bin/env python# -*- coding:utf-8 -*-import osimport urllibimport urllib2from lxml import etr原创 2017-11-06 11:29:23 · 3975 阅读 · 0 评论 -
处理Redis里的数据
处理Redis里的数据有缘网的数据爬回来了,但是放在Redis里没有处理。之前我们配置文件里面没有定制自己的ITEM_PIPELINES,而是使用了RedisPipeline,所以现在这些数据都被保存在redis的youyuan:items键中,所以我们需要另外做处理。在scrapy-youyuan目录下可以看到一个process_items.py文件,这个文件就是scrapy-redis原创 2017-11-11 10:33:29 · 1209 阅读 · 0 评论 -
有缘网分布式爬虫案例2
有缘网分布式爬虫案例:修改 spiders/youyuan.py在spiders目录下增加youyuan.py文件编写我们的爬虫,使其具有分布式:# -*- coding:utf-8 -*-from scrapy.linkextractors import LinkExtractor#from scrapy.spiders import CrawlSpider, Rule# 1.原创 2017-11-11 10:31:00 · 811 阅读 · 0 评论 -
有缘网分布式爬虫案例
有缘网分布式爬虫案例# clone github scrapy-redis源码文件git clone https://github.com/rolando/scrapy-redis.git# 直接拿官方的项目范例,改名为自己的项目用(针对懒癌患者)mv scrapy-redis/example-project ~/scrapy-youyuan修改settings.py下面列举了原创 2017-11-11 10:30:07 · 1681 阅读 · 0 评论 -
源码自带项目说明
源码自带项目说明:使用scrapy-redis的example来修改先从github上拿到scrapy-redis的示例,然后将里面的example-project目录移到指定的地址:# clone github scrapy-redis源码文件git clone https://github.com/rolando/scrapy-redis.git# 直接拿官方的项目范例,改名为自原创 2017-11-11 10:27:55 · 616 阅读 · 0 评论 -
从零搭建Redis-Scrapy分布式爬虫
Scrapy-Redis分布式策略:假设有四台电脑:Windows 10、Mac OS X、Ubuntu 16.04、CentOS 7.2,任意一台电脑都可以作为 Master端 或 Slaver端,比如:Master端(核心服务器) :使用 Windows 10,搭建一个Redis数据库,不负责爬取,只负责url指纹判重、Request的分配,以及数据的存储Slave原创 2017-11-11 10:26:01 · 1610 阅读 · 0 评论 -
源码分析参考:Spider
spider.py设计的这个spider从redis中读取要爬的url,然后执行爬取,若爬取过程中返回更多的url,那么继续进行直至所有的request完成。之后继续从redis中读取url,循环这个过程。分析:在这个spider中通过connect signals.spider_idle信号实现对crawler状态的监视。当idle时,返回新的make_requests_from_url原创 2017-11-10 10:27:57 · 657 阅读 · 0 评论 -
源码分析参考:Scheduler
scheduler.py此扩展是对scrapy中自带的scheduler的替代(在settings的SCHEDULER变量中指出),正是利用此扩展实现crawler的分布式调度。其利用的数据结构来自于queue中实现的数据结构。scrapy-redis所实现的两种分布式:爬虫分布式以及item处理分布式就是由模块scheduler和模块pipelines实现。上述其它模块作为为二者辅助的功原创 2017-11-10 10:26:53 · 815 阅读 · 0 评论 -
源码分析参考:Queue
queue.py该文件实现了几个容器类,可以看这些容器和redis交互频繁,同时使用了我们上边picklecompat中定义的序列化器。这个文件实现的几个容器大体相同,只不过一个是队列,一个是栈,一个是优先级队列,这三个容器到时候会被scheduler对象实例化,来实现request的调度。比如我们使用SpiderQueue最为调度队列的类型,到时候request的调度方法就是先进先出,而实用原创 2017-11-10 10:25:40 · 289 阅读 · 0 评论 -
源码分析参考:Pipelines
pipelines.py这是是用来实现分布式处理的作用。它将Item存储在redis中以实现分布式处理。由于在这里需要读取配置,所以就用到了from_crawler()函数。from scrapy.utils.misc import load_objectfrom scrapy.utils.serialize import ScrapyJSONEncoderfrom twisted.int原创 2017-11-10 10:24:24 · 338 阅读 · 0 评论 -
源码分析参考:Picklecompat
picklecompat.py"""A pickle wrapper module with protocol=-1 by default."""try: import cPickle as pickle # PY2except ImportError: import pickledef loads(s): return pickle.loads(s)原创 2017-11-10 10:23:15 · 387 阅读 · 0 评论 -
源码分析参考:Dupefilter
dupefilter.py负责执行requst的去重,实现的很有技巧性,使用的Redis的设定数据结构。但是注意调度并不使用其中用于在这个模块中实现的dupefilter键做请求的调度,而是使用queue.py模块中实现的队列。当请求不重复时,将其存入到队列中,调度时将其弹出。import loggingimport timefrom scrapy.dupefilters imp原创 2017-11-10 10:22:20 · 1136 阅读 · 0 评论 -
源码分析参考:Connection
官方站点:https://github.com/rolando/scrapy-redisscrapy-redis的官方文档写的比较简洁,没有提及其运行原理,所以如果想全面的理解分布式爬虫的运行原理,还是得看scrapy-redis的源代码才行。scrapy-redis工程的主体还是是redis和scrapy两个库,工程本身实现的东西不是很多,这个工程就像胶水一样,把这两个插件粘结了起来。下原创 2017-11-10 10:21:11 · 478 阅读 · 0 评论 -
Scrapy 和 scrapy-redis的区别
Scrapy 和 scrapy-redis的区别Scrapy 是一个通用的爬虫框架,但是不支持分布式,Scrapy-redis是为了更方便地实现Scrapy分布式爬取,而提供了一些以redis为基础的组件(仅有组件)。pip install scrapy-redisScrapy-redis提供了下面四种组件(components):(四种组件意味着这四个模块都要做相应的修改)原创 2017-11-10 10:20:00 · 847 阅读 · 0 评论 -
新浪网分类资讯爬虫
新浪网分类资讯爬虫思考:如何将已有的Scrapy爬虫项目,改写成scrapy-redis分布式爬虫。要求:将所有对应的大类的 标题和urls、小类的 标题和urls、子链接url、文章名以及文章内容,存入Redis数据库。以下为原Scrapy爬虫项目源码:items.py# -*- coding: utf-8 -*-import scrapyimport sys原创 2017-11-11 10:35:41 · 1120 阅读 · 1 评论 -
尝试改写新浪网分类资讯爬虫2
将已有的新浪网分类资讯Scrapy爬虫项目,修改为基于RedisSpider类的scrapy-redis分布式爬虫项目注:items数据直接存储在Redis数据库中,这个功能已经由scrapy-redis自行实现。除非单独做额外处理(比如直接存入本地数据库等),否则不用编写pipelines.py代码。items.py文件# items.py# -*- coding: utf-8原创 2017-11-11 10:37:21 · 491 阅读 · 0 评论 -
IT桔子分布式项目1
IT桔子是关注IT互联网行业的结构化的公司数据库和商业信息服务提供商,于2013年5月21日上线。IT桔子致力于通过信息和数据的生产、聚合、挖掘、加工、处理,帮助目标用户和客户节约时间和金钱、提高效率,以辅助其各类商业行为,包括风险投资、收购、竞争情报、细分行业信息、国外公司产品信息数据服务等。用于需自行对所发表或采集的内容负责,因所发表或采集的内容引发的一切纠纷、损失,由该内容的发表原创 2017-11-11 10:38:05 · 912 阅读 · 0 评论 -
XPath与lxml类库
有同学说,我正则用的不好,处理HTML文档很累,有没有其他的方法?有!那就是XPath,我们可以先将 HTML文件 转换成 XML文档,然后用 XPath 查找 HTML 节点或元素。什么是XMLXML 指可扩展标记语言(EXtensible Markup Language)XML 是一种标记语言,很类似 HTMLXML 的设计宗旨是传输数据,而非显示数据XML 的标签需要我们自行原创 2017-11-06 11:22:26 · 304 阅读 · 0 评论 -
案例:使用正则表达式的爬虫
案例:使用正则表达式的爬虫现在拥有了正则表达式这把神兵利器,我们就可以进行对爬取到的全部网页源代码进行筛选了。下面我们一起尝试一下爬取内涵段子网站: http://www.neihan8.com/article/list_5_1.html打开之后,不难看到里面一个一个灰常有内涵的段子,当你进行翻页的时候,注意url地址的变化:第一页url: http: //www.neih原创 2017-11-06 11:16:33 · 518 阅读 · 0 评论 -
正则表达式re模块
为什么要学正则表达式实际上爬虫一共就四个主要步骤:明确目标 (要知道你准备在哪个范围或者网站去搜索)爬 (将所有的网站的内容全部爬下来)取 (去掉对我们没用处的数据)处理数据(按照我们想要的方式存储和使用)我们在昨天的案例里实际上省略了第3步,也就是"取"的步骤。因为我们down下了的数据是全部的网页,这些数据很庞大并且很混乱,大部分的东西使我们不关心的,因此我们需要将之按我们的需原创 2017-11-06 11:10:46 · 328 阅读 · 0 评论 -
Requests: 让 HTTP 服务人类
Requests: 让 HTTP 服务人类虽然Python的标准库中 urllib2 模块已经包含了平常我们使用的大多数功能,但是它的 API 使用起来让人感觉不太好,而 Requests 自称 “HTTP for Humans”,说明使用更简洁方便。Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用:)Requests 继承了urllib2的原创 2017-11-06 11:04:02 · 637 阅读 · 0 评论 -
urllib2:URLError与HTTPError
urllib2 的异常错误处理在我们用urlopen或opener.open方法发出一个请求时,如果urlopen或opener.open不能处理这个response,就产生错误。这里主要说的是URLError和HTTPError,以及对它们的错误处理。URLErrorURLError 产生的原因主要有:没有网络连接服务器连接失败找不到指定的服务器我们可以用tr原创 2017-11-06 11:01:37 · 8786 阅读 · 0 评论 -
Handler处理器 和 自定义Opener
Handler处理器 和 自定义Openeropener是 urllib2.OpenerDirector 的实例,我们之前一直都在使用的urlopen,它是一个特殊的opener(也就是模块帮我们构建好的)。但是基本的urlopen()方法不支持代理、cookie等其他的HTTP/HTTPS高级功能。所以要支持这些功能:使用相关的 Handler处理器 来创建特定功能的原创 2017-11-06 10:53:27 · 835 阅读 · 0 评论 -
urllib2GET和POST请求
urllib2默认只支持HTTP/HTTPS的GET和POST方法urllib.urlencode()urllib 和 urllib2 都是接受URL请求的相关模块,但是提供了不同的功能。两个最显著的不同如下:urllib 仅可以接受URL,不能创建 设置了headers 的Request 类实例;但是 urllib 提供 urlencode 方法用来GET查询字符原创 2017-11-06 10:40:03 · 3551 阅读 · 0 评论 -
urllib2库的基本使用
urllib2库的基本使用所谓网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地。 在Python中有很多库可以用来抓取网页,我们先学习urllib2。urllib2 是 Python2.7 自带的模块(不需要下载,导入即可使用)urllib2 官方文档:https://docs.python.org/2/library/urllib2.htmlurlli原创 2017-11-06 10:37:01 · 272 阅读 · 0 评论 -
HTTP / HTTPS抓包工具-Fiddler
HTTP代理神器FiddlerFiddler是一款强大Web调试工具,它能记录所有客户端和服务器的HTTP请求。 Fiddler启动的时候,默认IE的代理设为了127.0.0.1:8888,而其他浏览器是需要手动设置。工作原理Fiddler 是以代理web服务器的形式工作的,它使用代理地址:127.0.0.1,端口:8888Fiddler抓取HTTPS设置启动F原创 2017-11-06 10:27:04 · 765 阅读 · 0 评论 -
HTTP和HTTPS回顾
HTTP和HTTPSHTTP协议(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收 HTML页面的方法。HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)简单讲是HTTP的安全版,在HTTP下加入SSL层。SSL(Secure Sockets Layer 安全套接层)主要用于W原创 2017-11-05 09:35:31 · 653 阅读 · 0 评论 -
通用爬虫和聚焦爬虫
通用爬虫和聚焦爬虫根据使用场景,网络爬虫可分为 通用爬虫 和 聚焦爬虫 两种.通用爬虫通用网络爬虫 是 捜索引擎抓取系统(Baidu、Google、Yahoo等)的重要组成部分。主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份。通用搜索引擎(Search Engine)工作原理通用网络爬虫 从互联网中搜集网页,采集信息,这些网页信息用于为搜索引擎建立索引从而提原创 2017-11-05 09:12:14 · 11000 阅读 · 0 评论 -
IT桔子分布式项目2
项目实现:items.py# items.py# -*- coding: utf-8 -*-import scrapyclass CompanyItem(scrapy.Item): # 公司id (url数字部分) info_id = scrapy.Field() # 公司名称 company_name = scrapy.Field()原创 2017-11-11 10:40:34 · 1165 阅读 · 0 评论 -
通过Fiddler进行手机抓包
通过Fiddler进行手机抓包通过Fiddler抓包工具,可以抓取手机的网络通信,但前提是手机和电脑处于同一局域网内(WI-FI或热点),然后进行以下设置:用Fiddler对Android应用进行抓包打开Fiddler设置在Connections里设置允许连接远程计算机,确认后重新启动Fiddler在命令提示符下输入ipconfig查看本机IP打开Android设备的“设置原创 2017-11-10 10:18:20 · 398 阅读 · 0 评论 -
(案例六)三种scrapy模拟登陆策略
注意:模拟登陆时,必须保证settings.py里的 COOKIES_ENABLED (Cookies中间件) 处于开启状态COOKIES_ENABLED = True 或 # COOKIES_ENABLED = False策略一:直接POST数据(比如需要登陆的账户信息)只要是需要提供post数据的,就可以用这种方法。下面示例里post的数据是账户密码:# -*-原创 2017-11-10 10:14:35 · 501 阅读 · 0 评论 -
尝试对知乎网验证码进行处理:
尝试对知乎网验证码进行处理:许多流行的内容管理系统即使加了验证码模块,其众所周知的注册页面也经常会遭到网络 机器人的垃圾注册。那么,这些网络机器人究,竟是怎么做的呢?既然我们已经,可以成功地识别出保存在电脑上 的验证码了,那么如何才能实现一个全能的网络机器人呢?大多数网站生成的验证码图片都具有以下属性。它们是服务器端的程序动态生成的图片。验证码图片的 src 属性可能和普通图片原创 2017-11-08 12:31:34 · 1532 阅读 · 0 评论 -
处理给规范的文字
处理给规范的文字你要处理的大多数文字都是比较干净、格式规范的。格式规范的文字通常可以满足一些需求,不过究竟什么是“格式混乱”,什么算“格式规范”,确实因人而异。 通常,格式规范的文字具有以下特点:使用一个标准字体(不包含手写体、草书,或者十分“花哨的”字体) • 虽然被复印或拍照,字体还是很清晰,没有多余的痕迹或污点排列整齐,没有歪歪斜斜的字没有超出图片范围,也没有残缺不全,或紧紧贴在原创 2017-11-08 12:25:38 · 458 阅读 · 0 评论 -
机器视觉与Tesseract介绍
机器视觉从 Google 的无人驾驶汽车到可以识别假钞的自动售卖机,机器视觉一直都是一个应用广 泛且具有深远的影响和雄伟的愿景的领域。我们将重点介绍机器视觉的一个分支:文字识别,介绍如何用一些 Python库来识别和使用在线图片中的文字。我们可以很轻松的阅读图片里的文字,但是机器阅读这些图片就会非常困难,利用这种人类用户可以正常读取但是大多数机器人都没法读取的图片,验证码 (CAPTC原创 2017-11-08 12:24:34 · 773 阅读 · 0 评论 -
案例三:执行 JavaScript 语句
案例三:执行 JavaScript 语句隐藏百度图片from selenium import webdriverdriver = webdriver.PhantomJS()driver.get("https://www.baidu.com/")# 给搜索输入框标红的javascript脚本js = "var q=document.getElementById(\原创 2017-11-08 12:23:27 · 263 阅读 · 0 评论 -
案例二:动态页面模拟点击
#!/usr/bin/env python# -*- coding:utf-8 -*-# python的测试模块import unittestfrom selenium import webdriverfrom bs4 import BeautifulSoupclass douyuSelenium(unittest.TestCase): # 初始化方法 def s原创 2017-11-07 18:26:13 · 494 阅读 · 0 评论 -
案例一:网站模拟登录
# douban.pyfrom selenium import webdriverfrom selenium.webdriver.common.keys import Keysimport timedriver = webdriver.PhantomJS()driver.get("http://www.douban.com")# 输入账号密码driver.find_elemen原创 2017-11-07 18:25:43 · 316 阅读 · 0 评论 -
Selenium 与PhantomJS
SeleniumSelenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium 可以直接运行在浏览器上,它支持所有主流的浏览器(包括PhantomJS这些无界面的浏览器)。Selenium 可以根据我们的指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏,或者判断网站上某些动作是否发生。原创 2017-11-07 18:19:26 · 476 阅读 · 0 评论 -
动态HTML介绍
JavaScriptJavaScript 是网络上最常用也是支持者最多的客户端脚本语言。它可以收集 用户的跟踪数据,不需要重载页面直接提交表单,在页面嵌入多媒体文件,甚至运行网页游戏。我们可以在网页源代码的标签里看到,比如:jQueryjQuery 是一个十分常见的库,70% 最流行的网站(约 200 万)和约 30% 的其他网站(约 2 亿)都在使用。一个网站使用 jQue原创 2017-11-07 18:18:05 · 1583 阅读 · 0 评论 -
动态HTML处理和机器图像识别
爬虫(Spider),反爬虫(Anti-Spider),反反爬虫(Anti-Anti-Spider) 之间恢宏壮阔的斗争...Day 1小莫想要某站上所有的电影,写了标准的爬虫(基于HttpClient库),不断地遍历某站的电影列表页面,根据 Html 分析电影名字存进自己的数据库。这个站点的运维小黎发现某个时间段请求量陡增,分析日志发现都是 IP(xxx.xxx.xx原创 2017-11-07 18:17:02 · 997 阅读 · 0 评论