爬虫
爬虫
杨林伟
像火箭科学家一样思考!
展开
-
97 爬虫 - scrapy-redis实战(八)
IT桔子分布式项目T桔子是关注IT互联网行业的结构化的公司数据库和商业信息服务提供商,于2013年5月21日上线。IT桔子致力于通过信息和数据的生产、聚合、挖掘、加工、处理,帮助目标用户和客户节约时间和金钱、提高效率,以辅助其各类商业行为,包括风险投资、收购、竞争情报、细分行业信息、国外公司产品信息数据服务等。用于需自行对所发表或采集的内容负责,因所发表或采集的内容引发的一切纠纷、损失,由该...原创 2019-09-02 16:26:18 · 462 阅读 · 0 评论 -
96 爬虫 - scrapy-redis实战(七)
将已有的新浪网分类资讯Scrapy爬虫项目,修改为基于RedisSpider类的scrapy-redis分布式爬虫项目。注:items数据直接存储在Redis数据库中,这个功能已经由scrapy-redis自行实现。除非单独做额外处理(比如直接存入本地数据库等),否则不用编写pipelines.py代码。items.py文件# items.py# -*- coding: utf-8 -...原创 2019-09-02 16:22:56 · 394 阅读 · 0 评论 -
95 爬虫 - scrapy-redis实战(六)
新浪网分类资讯爬虫思考:如何将已有的Scrapy爬虫项目,改写成scrapy-redis分布式爬虫。要求:将所有对应的大类的 标题和urls、小类的 标题和urls、子链接url、文章名以及文章内容,存入Redis数据库。以下为原Scrapy爬虫项目源码:items.py# -*- coding: utf-8 -*-import scrapyimport sysreload(s...原创 2019-09-02 16:20:44 · 330 阅读 · 0 评论 -
94 爬虫 - scrapy-redis实战(五)
处理Redis里的数据有缘网的数据爬回来了,但是放在Redis里没有处理。之前我们配置文件里面没有定制自己的ITEM_PIPELINES,而是使用了RedisPipeline,所以现在这些数据都被保存在redis的youyuan:items键中,所以我们需要另外做处理。在scrapy-youyuan目录下可以看到一个process_items.py文件,这个文件就是scrapy-redis的e...原创 2019-09-02 16:18:25 · 317 阅读 · 0 评论 -
93 爬虫 - scrapy-redis实战(四)
有缘网分布式爬虫案例(二)修改 spiders/youyuan.py在spiders目录下增加youyuan.py文件编写我们的爬虫,使其具有分布式:# -*- coding:utf-8 -*-from scrapy.linkextractors import LinkExtractor#from scrapy.spiders import CrawlSpider, Rule# 1...原创 2019-09-02 16:15:39 · 327 阅读 · 0 评论 -
92 爬虫 - scrapy-redis实战(三)
有缘网分布式爬虫案例# clone github scrapy-redis源码文件git clone https://github.com/rolando/scrapy-redis.git# 直接拿官方的项目范例,改名为自己的项目用(针对懒癌患者)mv scrapy-redis/example-project ~/scrapy-youyuan修改settings.py下面列举了修改...原创 2019-09-02 16:13:30 · 344 阅读 · 0 评论 -
91 爬虫 - scrapy-redis实战(二)
源码自带项目说明使用scrapy-redis的example来修改先从github上拿到scrapy-redis的示例,然后将里面的example-project目录移到指定的地址:# clone github scrapy-redis源码文件git clone https://github.com/rolando/scrapy-redis.git# 直接拿官方的项目范例,改名为自己的...原创 2019-09-02 16:09:15 · 1344 阅读 · 0 评论 -
90 爬虫 - scrapy-redis实战(一)
从零搭建Redis-Scrapy分布式爬虫Scrapy-Redis分布式策略:假设有四台电脑:Windows 10、Mac OS X、Ubuntu 16.04、CentOS 7.2,任意一台电脑都可以作为 Master端 或 Slaver端,比如:Master端(核心服务器) :使用 Windows 10,搭建一个Redis数据库,不负责爬取,只负责url指纹判重、Request的分配...原创 2019-09-02 16:03:29 · 431 阅读 · 0 评论 -
89 爬虫 - scrapy-redis源码分析(spider)
设计的这个spider从redis中读取要爬的url,然后执行爬取,若爬取过程中返回更多的url,那么继续进行直至所有的request完成。之后继续从redis中读取url,循环这个过程。分析:在这个spider中通过connect signals.spider_idle信号实现对crawler状态的监视。当idle时,返回新的make_requests_from_url(url)给引擎,进而交...原创 2019-09-02 11:44:26 · 380 阅读 · 0 评论 -
88 爬虫 - scrapy-redis源码分析(scheduler)
此扩展是对scrapy中自带的scheduler的替代(在settings的SCHEDULER变量中指出),正是利用此扩展实现crawler的分布式调度。其利用的数据结构来自于queue中实现的数据结构。scrapy-redis所实现的两种分布式:爬虫分布式以及item处理分布式就是由模块scheduler和模块pipelines实现。上述其它模块作为为二者辅助的功能模块import impo...原创 2019-09-02 11:43:14 · 370 阅读 · 0 评论 -
87 爬虫 - scrapy-redis源码分析(queue)
该文件实现了几个容器类,可以看这些容器和redis交互频繁,同时使用了我们上边picklecompat中定义的序列化器。这个文件实现的几个容器大体相同,只不过一个是队列,一个是栈,一个是优先级队列,这三个容器到时候会被scheduler对象实例化,来实现request的调度。比如我们使用SpiderQueue最为调度队列的类型,到时候request的调度方法就是先进先出,而实用SpiderStac...原创 2019-09-02 11:42:18 · 284 阅读 · 0 评论 -
86 爬虫 - scrapy-redis源码分析(pipelines)
这是是用来实现分布式处理的作用。它将Item存储在redis中以实现分布式处理。由于在这里需要读取配置,所以就用到了from_crawler()函数。from scrapy.utils.misc import load_objectfrom scrapy.utils.serialize import ScrapyJSONEncoderfrom twisted.internet.threads...原创 2019-09-02 11:41:32 · 314 阅读 · 0 评论 -
85 爬虫 - scrapy-redis源码分析(picklecompat)
"""A pickle wrapper module with protocol=-1 by default."""try: import cPickle as pickle # PY2except ImportError: import pickledef loads(s): return pickle.loads(s)def dumps(obj):...原创 2019-09-02 11:40:47 · 312 阅读 · 0 评论 -
84 爬虫 - scrapy-redis源码分析(dupefilter)
负责执行requst的去重,实现的很有技巧性,使用redis的set数据结构。但是注意scheduler并不使用其中用于在这个模块中实现的dupefilter键做request的调度,而是使用queue.py模块中实现的queue。当request不重复时,将其存入到queue中,调度时将其弹出。import loggingimport timefrom scrapy.dupefilte...原创 2019-09-02 11:39:27 · 839 阅读 · 0 评论 -
83 爬虫 - scrapy-redis源码分析(Connection)
官方站点:https://github.com/rolando/scrapy-redisscrapy-redis的官方文档写的比较简洁,没有提及其运行原理,所以如果想全面的理解分布式爬虫的运行原理,还是得看scrapy-redis的源代码才行。scrapy-redis工程的主体还是是redis和scrapy两个库,工程本身实现的东西不是很多,这个工程就像胶水一样,把这两个插件粘结了起来。下面我...原创 2019-09-02 11:38:13 · 276 阅读 · 0 评论 -
82 爬虫 - Scrapy 和 scrapy-redis的区别
Scrapy 是一个通用的爬虫框架,但是不支持分布式,Scrapy-redis是为了更方便地实现Scrapy分布式爬取,而提供了一些以redis为基础的组件(仅有组件)。pip install scrapy-redisScrapy-redis提供了下面四种组件(components):(四种组件意味着这四个模块都要做相应的修改)SchedulerDuplication FilterIt...原创 2019-09-02 11:36:02 · 365 阅读 · 0 评论 -
81 爬虫 - Scrapy案例(通过Fiddler进行手机抓包)
通过Fiddler抓包工具,可以抓取手机的网络通信,但前提是手机和电脑处于同一局域网内(WI-FI或热点),然后进行以下设置。用Fiddler对Android应用进行抓包1.打开Fiddler设置2.在Connections里设置允许连接远程计算机,确认后重新启动Fiddler在命令提示符下输入ipconfig查看本机IP打开Android设备的“设置”->“WLAN...原创 2019-09-02 11:32:06 · 670 阅读 · 0 评论 -
80 爬虫 - Scrapy案例(三种登录策略)
注意:模拟登陆时,必须保证settings.py里的 COOKIES_ENABLED (Cookies中间件) 处于开启状态。COOKIES_ENABLED = True 或 # COOKIES_ENABLED = False策略一:直接POST数据(比如需要登陆的账户信息)只要是需要提供post数据的,就可以用这种方法。下面示例里post的数据是账户密码:# -*- coding: u...原创 2019-09-02 11:17:18 · 308 阅读 · 0 评论 -
79 爬虫 - Scrapy案例(数据保存在MongoDB)
用Pymongo保存数据爬取豆瓣电影top250movie.douban.com/top250的电影数据,并保存在MongoDB中。items.pyclass DoubanspiderItem(scrapy.Item): # 电影标题 title = scrapy.Field() # 电影评分 score = scrapy.Field() # 电影信息...原创 2019-09-02 11:14:36 · 339 阅读 · 0 评论 -
78 爬虫 - Scrapy案例(图片下载器爬虫)
items.pyclass CoserItem(scrapy.Item): url = scrapy.Field() name = scrapy.Field() info = scrapy.Field() image_urls = scrapy.Field() images = scrapy.Field()spiders/coser.py# -*- ...原创 2019-09-02 11:12:08 · 495 阅读 · 0 评论 -
77 爬虫 - Scrapy案例(新浪网分类资讯爬虫)
爬取新浪网导航页所有下所有大类、小类、小类里的子链接,以及子链接页面的新闻内容。效果演示图:items.pyimport scrapyimport sysreload(sys)sys.setdefaultencoding("utf-8")class SinaItem(scrapy.Item): # 大类的标题 和 url parentTitle = scrapy....原创 2019-09-02 11:09:39 · 820 阅读 · 0 评论 -
76 爬虫 - Scrapy案例(阳光热线问政平台)
http://wz.sun0769.com/index.php/question/questionType?type=4爬取投诉帖子的编号、帖子的url、帖子的标题,和帖子里的内容。items.pyimport scrapyclass DongguanItem(scrapy.Item): # 每个帖子的标题 title = scrapy.Field() # 每个帖...原创 2019-09-02 11:07:02 · 512 阅读 · 0 评论 -
75 爬虫 - Scrapy案例(手机App抓包爬虫)
1. items.pyclass DouyuspiderItem(scrapy.Item): name = scrapy.Field()# 存储照片的名字 imagesUrls = scrapy.Field()# 照片的url路径 imagesPath = scrapy.Field()# 照片保存在本地的路径2. spiders/douyu.pyimport scr...原创 2019-09-02 11:04:10 · 512 阅读 · 0 评论 -
74 爬虫 - Scrapy框架Settings
Scrapy设置(settings)提供了定制Scrapy组件的方法。可以控制包括核心(core),插件(extension),pipeline及spider组件。比如 设置Json Pipeliine、LOG_LEVEL等。参考文档:http://scrapy-chs.readthedocs.io/zh_CN/1.0/topics/settings.html#topics-settings-r...原创 2019-09-02 11:00:25 · 286 阅读 · 0 评论 -
73 爬虫 - Scrapy框架Downloader Middlewares
反反爬虫相关机制Some websites implement certain measures to prevent bots from crawling them, with varying degrees of sophistication. Getting around those measures can be difficult and tricky, and may someti...原创 2019-09-02 10:54:16 · 311 阅读 · 0 评论 -
72 爬虫 - Scrapy框架 Request/Response
RequestRequest 部分源码:# 部分代码class Request(object_ref): def __init__(self, url, callback=None, method='GET', headers=None, body=None, cookies=None, meta=None, encoding='utf-8', ...原创 2019-09-02 10:42:40 · 298 阅读 · 0 评论 -
71 爬虫 - Scrapy框架 CrawlSpiders
通过下面的命令可以快速创建 CrawlSpider模板 的代码:scrapy genspider -t crawl tencent tencent.com上一个案例中,我们通过正则表达式,制作了新的url作为Request请求参数,现在我们可以换个花样…class scrapy.spiders.CrawlSpider它是Spider的派生类,Spider类的设计原则是只爬取start_...原创 2019-08-30 15:05:50 · 374 阅读 · 0 评论 -
70 爬虫 - Scrapy框架 Spider
Spider类定义了如何爬取某个(或某些)网站。包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item)。 换句话说,Spider就是您定义爬取的动作及分析某个网页(或者是有些网页)的地方。class scrapy.Spider是最基本的类,所有编写的爬虫必须继承这个类。主要用到的函数及调用顺序为:__init__(): 初始化爬虫名字和start_ur...原创 2019-08-30 14:52:23 · 321 阅读 · 0 评论 -
69 爬虫 - Scrapy框架 Item Pipeline
当Item在Spider中被收集之后,它将会被传递到Item Pipeline,这些Item Pipeline组件按定义的顺序处理Item。每个Item Pipeline都是实现了简单方法的Python类,比如决定此Item是丢弃而存储。以下是item pipeline的一些典型应用:验证爬取的数据(检查item包含某些字段,比如说name字段)查重(并丢弃)将爬取结果保存到文件或者数据...原创 2019-08-30 14:46:33 · 308 阅读 · 0 评论 -
68 爬虫 - Scrapy框架 Shell
Scrapy终端是一个交互终端,我们可以在未启动spider的情况下尝试及调试代码,也可以用来测试XPath或CSS表达式,查看他们的工作方式,方便我们爬取的网页中提取的数据。如果安装了 IPython ,Scrapy终端将使用 IPython (替代标准Python终端)。 IPython 终端与其他相比更为强大,提供智能的自动补全,高亮输出,及其他特性。(推荐安装IPython)。启动Sc...原创 2019-08-30 14:43:37 · 393 阅读 · 0 评论 -
67 爬虫 - Scrapy框架 入门案例
一. 新建项目(scrapy startproject)在开始爬取之前,必须创建一个新的Scrapy项目。进入自定义的项目目录中,运行下列命令:scrapy startproject mySpider其中, mySpider 为项目名称,可以看到将会创建一个 mySpider 文件夹,目录结构大致如下:下面来简单介绍一下各个主要文件的作用:scrapy.cfg :项目的配置文件...原创 2019-08-30 14:36:14 · 403 阅读 · 0 评论 -
66 爬虫 - Scrapy框架 安装
Scrapy框架官方网址:http://doc.scrapy.org/en/latestScrapy中文维护站点:http://scrapy-chs.readthedocs.io/zh_CN/latest/index.htmlWindows 安装方式Python 2 / 3升级pip版本:pip install --upgrade pip通过pip 安装 Scrapy 框架pip in...原创 2019-08-30 14:16:03 · 281 阅读 · 0 评论 -
65 爬虫 - Scrapy 框架
Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛。框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非常之方便。Scrapy 使用了 Twisted['twɪstɪd](其主要对手是Tornado)异步网络框架来处理网络通讯,可以加快我们的下载速度,不用自己去实现异步框架,并且包含了各种中间件接口,...原创 2019-08-30 13:57:47 · 332 阅读 · 0 评论 -
64 爬虫 - Tesseract对图片验证码处理
大多数其他的验证码都是比较简单的。例如,流行的 PHP 内容管理系统 Drupal 有一个著 名的验证码模块(https://www.drupal.org/project/captcha),可以生成不同难度的验证码。那么与其他验证码相比,究竟是什么让这个验证码更容易被人类和机器读懂呢?字母没有相互叠加在一起,在水平方向上也没有彼此交叉。也就是说,可以在每一个字 母外面画一个方框,而不会重叠...原创 2019-08-30 11:57:06 · 361 阅读 · 0 评论 -
63 爬虫 - Tesseract对图片验证码处理
许多流行的内容管理系统即使加了验证码模块,其众所周知的注册页面也经常会遭到网络 机器人的垃圾注册。那么,这些网络机器人究,竟是怎么做的呢?既然我们已经,可以成功地识别出保存在电脑上 的验证码了,那么如何才能实现一个全能的网络机器人呢?大多数网站生成的验证码图片都具有以下属性。它们是服务器端的程序动态生成的图片。验证码图片的 src 属性可能和普通图片不太一 样,比如 <img sr...原创 2019-08-30 11:43:24 · 359 阅读 · 0 评论 -
62 爬虫 - Tesseract从网站图片中抓取文字
用 Tesseract 读取硬盘里图片上的文字,可能不怎么令人兴奋,但当我们把它和网络爬虫组合使用时,就能成为一个强大的工具。网站上的图片可能并不是故意把文字做得很花哨 (就像餐馆菜单的 JPG 图片上的艺术字),但它们上面的文字对网络爬虫来说就是隐藏起来 了,举个例子:虽然亚马逊的 robots.txt 文件允许抓取网站的产品页面,但是图书的预览页通常不让网络机 器人采集。图书的预览页是...原创 2019-08-30 11:34:05 · 504 阅读 · 0 评论 -
61 爬虫 - Tesseract处理一些格式规范的文字
你要处理的大多数文字都是比较干净、格式规范的。格式规范的文字通常可以满足一些需求,不过究竟什么是“格式混乱”,什么算“格式规范”,确实因人而异。 通常,格式规范的文字具有以下特点:使用一个标准字体(不包含手写体、草书,或者十分“花哨的”字体) • 虽然被复印或拍照,字体还是很清晰,没有多余的痕迹或污点排列整齐,没有歪歪斜斜的字没有超出图片范围,也没有残缺不全,或紧紧贴在图片的边缘文...原创 2019-08-30 11:31:19 · 437 阅读 · 0 评论 -
60 爬虫 - 机器视觉与Tesseract
机器视觉从 Google 的无人驾驶汽车到可以识别假钞的自动售卖机,机器视觉一直都是一个应用广 泛且具有深远的影响和雄伟的愿景的领域。我们将重点介绍机器视觉的一个分支:文字识别,介绍如何用一些 Python库来识别和使用在线图片中的文字。我们可以很轻松的阅读图片里的文字,但是机器阅读这些图片就会非常困难,利用这种人类用户可以正常读取但是大多数机器人都没法读取的图片,验证码 (CAPTCHA)...原创 2019-08-30 11:23:58 · 328 阅读 · 0 评论 -
59 爬虫 - Selenium案例(执行 JavaScript 语句)
1.隐藏百度图片from selenium import webdriverdriver = webdriver.PhantomJS()driver.get("https://www.baidu.com/")# 给搜索输入框标红的javascript脚本js = "var q=document.getElementById(\"kw\");q.style.border=\"2px s...原创 2019-08-30 11:16:41 · 411 阅读 · 0 评论 -
58 爬虫 - Selenium案例(动态页面模拟点击)
#!/usr/bin/env python# -*- coding:utf-8 -*-# python的测试模块import unittestfrom selenium import webdriverfrom bs4 import BeautifulSoupclass douyuSelenium(unittest.TestCase): # 初始化方法 def s...原创 2019-08-30 11:10:46 · 586 阅读 · 0 评论