爬虫
linuxsin
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
IT桔子分布式项目1
IT桔子是关注IT互联网行业的结构化的公司数据库和商业信息服务提供商,于2013年5月21日上线。IT桔子致力于通过信息和数据的生产、聚合、挖掘、加工、处理,帮助目标用户和客户节约时间和金钱、提高效率,以辅助其各类商业行为,包括风险投资、收购、竞争情报、细分行业信息、国外公司产品信息数据服务等。用于需自行对所发表或采集的内容负责,因所发表或采集的内容引发的一切纠纷、损失,由该内容的发表原创 2017-11-11 10:38:05 · 1008 阅读 · 0 评论 -
Scrapy 和 scrapy-redis的区别
Scrapy 和 scrapy-redis的区别Scrapy 是一个通用的爬虫框架,但是不支持分布式,Scrapy-redis是为了更方便地实现Scrapy分布式爬取,而提供了一些以redis为基础的组件(仅有组件)。pip install scrapy-redisScrapy-redis提供了下面四种组件(components):(四种组件意味着这四个模块都要做相应的修改)原创 2017-11-10 10:20:00 · 920 阅读 · 0 评论 -
源码分析参考:Connection
官方站点:https://github.com/rolando/scrapy-redisscrapy-redis的官方文档写的比较简洁,没有提及其运行原理,所以如果想全面的理解分布式爬虫的运行原理,还是得看scrapy-redis的源代码才行。scrapy-redis工程的主体还是是redis和scrapy两个库,工程本身实现的东西不是很多,这个工程就像胶水一样,把这两个插件粘结了起来。下原创 2017-11-10 10:21:11 · 552 阅读 · 0 评论 -
源码分析参考:Dupefilter
dupefilter.py负责执行requst的去重,实现的很有技巧性,使用的Redis的设定数据结构。但是注意调度并不使用其中用于在这个模块中实现的dupefilter键做请求的调度,而是使用queue.py模块中实现的队列。当请求不重复时,将其存入到队列中,调度时将其弹出。import loggingimport timefrom scrapy.dupefilters imp原创 2017-11-10 10:22:20 · 1224 阅读 · 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 · 445 阅读 · 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 · 398 阅读 · 0 评论 -
源码分析参考:Queue
queue.py该文件实现了几个容器类,可以看这些容器和redis交互频繁,同时使用了我们上边picklecompat中定义的序列化器。这个文件实现的几个容器大体相同,只不过一个是队列,一个是栈,一个是优先级队列,这三个容器到时候会被scheduler对象实例化,来实现request的调度。比如我们使用SpiderQueue最为调度队列的类型,到时候request的调度方法就是先进先出,而实用原创 2017-11-10 10:25:40 · 366 阅读 · 0 评论 -
源码分析参考:Scheduler
scheduler.py此扩展是对scrapy中自带的scheduler的替代(在settings的SCHEDULER变量中指出),正是利用此扩展实现crawler的分布式调度。其利用的数据结构来自于queue中实现的数据结构。scrapy-redis所实现的两种分布式:爬虫分布式以及item处理分布式就是由模块scheduler和模块pipelines实现。上述其它模块作为为二者辅助的功原创 2017-11-10 10:26:53 · 919 阅读 · 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 · 750 阅读 · 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 · 1719 阅读 · 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 · 698 阅读 · 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 · 1777 阅读 · 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 · 872 阅读 · 0 评论 -
处理Redis里的数据
处理Redis里的数据有缘网的数据爬回来了,但是放在Redis里没有处理。之前我们配置文件里面没有定制自己的ITEM_PIPELINES,而是使用了RedisPipeline,所以现在这些数据都被保存在redis的youyuan:items键中,所以我们需要另外做处理。在scrapy-youyuan目录下可以看到一个process_items.py文件,这个文件就是scrapy-redis原创 2017-11-11 10:33:29 · 1286 阅读 · 0 评论 -
新浪网分类资讯爬虫
新浪网分类资讯爬虫思考:如何将已有的Scrapy爬虫项目,改写成scrapy-redis分布式爬虫。要求:将所有对应的大类的 标题和urls、小类的 标题和urls、子链接url、文章名以及文章内容,存入Redis数据库。以下为原Scrapy爬虫项目源码:items.py# -*- coding: utf-8 -*-import scrapyimport sys原创 2017-11-11 10:35:41 · 1196 阅读 · 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 · 579 阅读 · 0 评论 -
通过Fiddler进行手机抓包
通过Fiddler进行手机抓包通过Fiddler抓包工具,可以抓取手机的网络通信,但前提是手机和电脑处于同一局域网内(WI-FI或热点),然后进行以下设置:用Fiddler对Android应用进行抓包打开Fiddler设置在Connections里设置允许连接远程计算机,确认后重新启动Fiddler在命令提示符下输入ipconfig查看本机IP打开Android设备的“设置原创 2017-11-10 10:18:20 · 526 阅读 · 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 · 1353 阅读 · 0 评论 -
通用爬虫和聚焦爬虫
通用爬虫和聚焦爬虫根据使用场景,网络爬虫可分为 通用爬虫 和 聚焦爬虫 两种.通用爬虫通用网络爬虫 是 捜索引擎抓取系统(Baidu、Google、Yahoo等)的重要组成部分。主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份。通用搜索引擎(Search Engine)工作原理通用网络爬虫 从互联网中搜集网页,采集信息,这些网页信息用于为搜索引擎建立索引从而提原创 2017-11-05 09:12:14 · 11521 阅读 · 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 · 751 阅读 · 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 · 950 阅读 · 0 评论 -
urllib2库的基本使用
urllib2库的基本使用所谓网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地。 在Python中有很多库可以用来抓取网页,我们先学习urllib2。urllib2 是 Python2.7 自带的模块(不需要下载,导入即可使用)urllib2 官方文档:https://docs.python.org/2/library/urllib2.htmlurlli原创 2017-11-06 10:37:01 · 330 阅读 · 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 · 3713 阅读 · 0 评论 -
Handler处理器 和 自定义Opener
Handler处理器 和 自定义Openeropener是 urllib2.OpenerDirector 的实例,我们之前一直都在使用的urlopen,它是一个特殊的opener(也就是模块帮我们构建好的)。但是基本的urlopen()方法不支持代理、cookie等其他的HTTP/HTTPS高级功能。所以要支持这些功能:使用相关的 Handler处理器 来创建特定功能的原创 2017-11-06 10:53:27 · 897 阅读 · 0 评论 -
urllib2:URLError与HTTPError
urllib2 的异常错误处理在我们用urlopen或opener.open方法发出一个请求时,如果urlopen或opener.open不能处理这个response,就产生错误。这里主要说的是URLError和HTTPError,以及对它们的错误处理。URLErrorURLError 产生的原因主要有:没有网络连接服务器连接失败找不到指定的服务器我们可以用tr原创 2017-11-06 11:01:37 · 8931 阅读 · 0 评论 -
Requests: 让 HTTP 服务人类
Requests: 让 HTTP 服务人类虽然Python的标准库中 urllib2 模块已经包含了平常我们使用的大多数功能,但是它的 API 使用起来让人感觉不太好,而 Requests 自称 “HTTP for Humans”,说明使用更简洁方便。Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用:)Requests 继承了urllib2的原创 2017-11-06 11:04:02 · 700 阅读 · 0 评论 -
正则表达式re模块
为什么要学正则表达式实际上爬虫一共就四个主要步骤:明确目标 (要知道你准备在哪个范围或者网站去搜索)爬 (将所有的网站的内容全部爬下来)取 (去掉对我们没用处的数据)处理数据(按照我们想要的方式存储和使用)我们在昨天的案例里实际上省略了第3步,也就是"取"的步骤。因为我们down下了的数据是全部的网页,这些数据很庞大并且很混乱,大部分的东西使我们不关心的,因此我们需要将之按我们的需原创 2017-11-06 11:10:46 · 409 阅读 · 0 评论 -
案例:使用正则表达式的爬虫
案例:使用正则表达式的爬虫现在拥有了正则表达式这把神兵利器,我们就可以进行对爬取到的全部网页源代码进行筛选了。下面我们一起尝试一下爬取内涵段子网站: http://www.neihan8.com/article/list_5_1.html打开之后,不难看到里面一个一个灰常有内涵的段子,当你进行翻页的时候,注意url地址的变化:第一页url: http: //www.neih原创 2017-11-06 11:16:33 · 587 阅读 · 0 评论 -
XPath与lxml类库
有同学说,我正则用的不好,处理HTML文档很累,有没有其他的方法?有!那就是XPath,我们可以先将 HTML文件 转换成 XML文档,然后用 XPath 查找 HTML 节点或元素。什么是XMLXML 指可扩展标记语言(EXtensible Markup Language)XML 是一种标记语言,很类似 HTMLXML 的设计宗旨是传输数据,而非显示数据XML 的标签需要我们自行原创 2017-11-06 11:22:26 · 373 阅读 · 0 评论 -
案例:使用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 · 4077 阅读 · 0 评论 -
Scrapy的安装介绍
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 安装原创 2017-11-08 12:36:43 · 372 阅读 · 0 评论 -
案例:使用BeautifuSoup4的爬虫
案例:使用BeautifuSoup4的爬虫我们以腾讯社招页面来做演示:http://hr.tencent.com/position.php?&start=10#a使用BeautifuSoup4解析器,将招聘网页上的职位名称、职位类别、招聘人数、工作地点、发布时间,以及每个职位详情的点击链接存储出来。# bs4_tencent.pyfrom bs4 import B原创 2017-11-07 18:07:43 · 435 阅读 · 0 评论 -
数据提取之JSON与JsonPATH
数据提取之JSON与JsonPATHJSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比如网站前台与后台之间的数据交互。JSON和XML的比较可谓不相上下。Python 2.7中自带了JSON模块,直接import json就可以使用了。官方文档:原创 2017-11-07 18:10:09 · 12319 阅读 · 0 评论 -
糗事百科实例:
糗事百科实例:爬取糗事百科段子,假设页面的URL是 http://www.qiushibaike.com/8hr/page/1要求:使用requests获取页面信息,用XPath / re 做数据提取获取每个帖子里的用户头像链接、用户姓名、段子内容、点赞次数和评论次数保存到 json 文件内参考代码#qiushibaike.py#import url原创 2017-11-07 18:13:18 · 529 阅读 · 0 评论 -
多线程糗事百科案例
多线程糗事百科案例案例要求参考上一个糗事百科单进程案例Queue(队列对象)Queue是python中的标准库,可以直接import Queue引用;队列是线程间最常用的交换数据的形式python下多线程的思考对于资源,加锁是个重要的环节。因为python原生的list,dict等,都是not thread safe的。而Queue,是线程安全的,因此在满足使用条件下,建议使用原创 2017-11-07 18:14:44 · 259 阅读 · 0 评论 -
动态HTML处理和机器图像识别
爬虫(Spider),反爬虫(Anti-Spider),反反爬虫(Anti-Anti-Spider) 之间恢宏壮阔的斗争...Day 1小莫想要某站上所有的电影,写了标准的爬虫(基于HttpClient库),不断地遍历某站的电影列表页面,根据 Html 分析电影名字存进自己的数据库。这个站点的运维小黎发现某个时间段请求量陡增,分析日志发现都是 IP(xxx.xxx.xx原创 2017-11-07 18:17:02 · 1084 阅读 · 0 评论 -
动态HTML介绍
JavaScriptJavaScript 是网络上最常用也是支持者最多的客户端脚本语言。它可以收集 用户的跟踪数据,不需要重载页面直接提交表单,在页面嵌入多媒体文件,甚至运行网页游戏。我们可以在网页源代码的标签里看到,比如:jQueryjQuery 是一个十分常见的库,70% 最流行的网站(约 200 万)和约 30% 的其他网站(约 2 亿)都在使用。一个网站使用 jQue原创 2017-11-07 18:18:05 · 1685 阅读 · 0 评论 -
Selenium 与PhantomJS
SeleniumSelenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium 可以直接运行在浏览器上,它支持所有主流的浏览器(包括PhantomJS这些无界面的浏览器)。Selenium 可以根据我们的指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏,或者判断网站上某些动作是否发生。原创 2017-11-07 18:19:26 · 547 阅读 · 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 · 372 阅读 · 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 · 572 阅读 · 0 评论
分享