scrapy

Scrapy爬虫框架入门

北城以北 提交于 2020-03-30 15:42:29
目录 Scrapy爬虫框架入门 Scrapy概述 组件 数据处理流程 安装和使用Scrapy Scrapy爬虫框架入门 Scrapy概述 Scrapy是Python开发的一个非常流行的网络爬虫框架,可以用来抓取Web站点并从页面中提取结构化的数据,被广泛的用于数据挖掘、数据监测和自动化测试等领域。下图展示了Scrapy的基本架构,其中包含了主要组件和系统的数据处理流程(图中带数字的红色箭头)。 组件 Scrapy引擎(Engine):Scrapy引擎是用来控制整个系统的数据处理流程。 调度器(Scheduler):调度器从Scrapy引擎接受请求并排序列入队列,并在Scrapy引擎发出请求后返还给它们。 下载器(Downloader):下载器的主要职责是抓取网页并将网页内容返还给蜘蛛(Spiders)。 蜘蛛(Spiders):蜘蛛是有Scrapy用户自定义的用来解析网页并抓取特定URL返回的内容的类,每个蜘蛛都能处理一个域名或一组域名,简单的说就是用来定义特定网站的抓取和解析规则。 条目管道(Item Pipeline):条目管道的主要责任是负责处理有蜘蛛从网页中抽取的数据条目,它的主要任务是清理、验证和存储数据。当页面被蜘蛛解析后,将被发送到条目管道,并经过几个特定的次序处理数据。每个条目管道组件都是一个Python类,它们获取了数据条目并执行对数据条目进行处理的方法

Scrapy简单入门及实例讲解

一世执手 提交于 2020-03-28 07:56:48
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中。其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。 Scrapy 使用了 Twisted异步网络库来处理网络通讯。整体架构大致如下 Scrapy主要包括了以下组件: 引擎(Scrapy) 用来处理整个系统的数据流, 触发事务(框架核心) 调度器(Scheduler) 用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址 下载器(Downloader) 用于下载网页内容, 并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted这个高效的异步模型上的) 爬虫(Spiders) 爬虫是主要干活的, 用于从特定的网页中提取自己需要的信息, 即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面 项目管道(Pipeline) 负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体

爬虫之Scrapy框架

≡放荡痞女 提交于 2020-03-26 01:59:43
框架:具有很强的通用性,且封装了一些通用实现方法的项目模板 scrapy (异步框架): 高性能的网络请求 高性能的数据解析 高性能的持久化存储 高性能的全站数据爬取 高性能的深度爬取 高性能的分布式 Scrapy环境安装 IOS和Linux pip install scrapy windows a. pip3 install wheel b. 下载twisted http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted # Twisted‑17.1.0‑cp35‑cp35m‑win_amd64.whl; Python是3.5版本的就选择cp35下载 c. 进入下载目录,执行 pip3 install Twisted‑17.1.0‑cp35‑cp35m‑win_amd64.whl # 安装失败可能是这个文件的版本导致的,即使Python版本都是对的,可以重新下载一个32位的试试 # 还安装失败的话就下载其python版本的,总有一个能成功 d. pip3 install pywin32 e. pip3 install scrapy 安装完成后,输入``scrapy`测试一下,出现如下图显示,即安装成功。 Scrapy的基本使用 创建工程 scrapy startprojct proNmame cd proNmame

scrapy之多url页面数据的抓取

时光怂恿深爱的人放手 提交于 2020-03-24 11:39:26
【概述】 如果我们想要对某一个网站的全站数据进行抓取,我们通常会有如下两种解决方法: 1.手动请求的发送(即基于Scrapy框架中的Spider的递归爬取进行实现(Request模块递归回调parse方法))代码详见: scrapy之多url页面数据的抓取 2.基于CrawlSpider的自动爬取进行实现(更加简洁和高效,推荐使用) 【CrawlSpider】 1.简介 CrawlSpider其实是Spider的一个子类,除了继承到Spider的特性和功能外,还派生除了其自己独有的更加强大的特性和功能。Spider是所有爬虫的基类,其设计原则只是为了爬取start_url列表中网页,而从爬取到的网页中提取出的url进行继续的爬取工作使用CrawlSpider更合适。 2.两大功能组件: a.链接提取器( LinkExtractor ):提取response中符合规则的链接。 LinkExtractor(allow=r'Items/',deny=xxx,restrict_xpath=xxx,restrict_css=xxx,deny_domains=xxx) 参数说明: allow=r'Items/' # 满足括号中“正则表达式”的值会被提取,如果为空,则全部匹配。  deny=xxx # 满足正则表达式的则不会被提取。 restrict_xpaths=xxx #

Scrapy实战篇(七)之Scrapy配合Selenium爬取京东商城信息(下)

江枫思渺然 提交于 2020-03-24 11:02:29
之前我们使用了selenium加Firefox作为下载中间件来实现爬取京东的商品信息。但是在大规模的爬取的时候,Firefox消耗资源比较多,因此我们希望换一种资源消耗更小的方法来爬取相关的信息。 下面就使用selenium加PhantomJS来实现之前的相同的逻辑。 这里需要修改的就是spider.py文件,其余的部分并不需要做出修改,我们给phantomjs添加一个User-Agent信息,并且设置不加载图片,这样将会加快渲染的速度。 spider.py from scrapy import Spider,Request from selenium import webdriver class JingdongSpider(Spider): name = 'jingdong' def __init__(self): SERVICE_ARGS = ['--load-images=false', '--disk-cache=true', '--ignore-ssl-errors=true'] self.browser = webdriver.PhantomJS(service_args=SERVICE_ARGS) self.browser.set_page_load_timeout(30) def closed(self,spider): print("spider closed"

Scrapy爬虫 捕获403状态码抛出CloseSpider异常

亡梦爱人 提交于 2020-03-24 07:28:10
3 月,跳不动了?>>> 1、爬数据的时候,有时会遇到被该网站封IP等情况,response的状态码为403,那么这时候我们希望能够抛出 CloseSpider的异常。 2、但是如scrapy官网提到的,Scrapy默认的设置是过滤掉有问题的HTTP response(即response状态码不在200-300之间)。因此403的情况会被ignore掉,意思就是我们不是处理这个url 请求的response,直接就忽略,也就是及时我们用response.status == 400判断没有作用,因为只有status处于200-300的请求才会被处理。 3. 如果我们想捕获或者处理403,或者其它如404或者500,这种请求时,我们在spider的类中把403放在handle_httpstatus_list中。如下就行。 class MySpider(CrawlSpider): handle_httpstatus_list = [403] 或者将403放在HTTPERROR_ALLOWED_CODES设置中 即在settings中增加HTTPERROR_ALLOWED_CODES = [403], HTTPERROR_ALLOWED_CODES默认是[] http://doc.scrapy.org/en/1.0/topics/spider-middleware.html

数据工程师需要掌握的18个python库

删除回忆录丶 提交于 2020-03-23 19:22:32
3 月,跳不动了?>>> 本文对python中在数据分析中需要掌握的库进行了整理,一起来看看吧! 目录 数据获取 Selenium Scrapy Beautiful Soup 数据清洗 Spacy NumPy Pandas 数据可视化 Matplotlib Pyecharts 数据建模 Scikit-learn PyTorch TensorFlow 模型检查 Lime 音频数据处理 Librosa 图像数据处理 OpenCV-Python Scikit-image 数据通信 Pymongo 数据分析结果web部署 Flask Django 数据获取 Selenium Selenium是一个Web测试自动化框架,最初是为软件测试人员创建的。它提供了Web驱动程序API,供浏览器与用户操作交互并返回响应。它运行时会直接实例化出一个浏览器,完全模拟用户的操作,比如点击链接、输入表单,点击按钮提交等。所以我们使用它可以很方便的来登录网站和爬取数据。 可以使用 brew install selenium 的方式来快速安装selenium。 数据获取 Scrapy Scrapy是Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。其吸引人的地方在于任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider

Python爬虫工程师常见面试题汇总

前提是你 提交于 2020-03-23 19:00:47
3 月,跳不动了?>>>   爬虫是Python的重要应用方向之一,也是学习Python的学员求职的主要方向。为了帮助学员更快更好的通过企业面试,小编悉心整理了5道Python爬虫面试题及答案,希望能够给大家提供帮助!   1、简要介绍下scrapy框架及其优势   scrapy是一个快速(fast)、高层次(high-level)的基于Python的Web爬虫构架,用于抓取Web站点并从页面中提取结构化的数据。scrapy使用了Twisted异步网络库来处理网络通讯。   scrapy框架的优点:1)更容易构建大规模的抓取项目;2)异步处理请求速度非常快;3)可以使用自动调节机制自动调整爬行速度。   2、爬虫使用多线程好?还是多进程好?   对于IO密集型代码(文件处理,网络爬虫),多线程能够有效提升效率(单线程下有IO操作会进行IO等待,会造成不必要的时间等待,而开启多线程后,A线程等待时,会自动切换到线程B,可以不浪费CPU的资源,从而提升程序执行效率)。在实际的采集过程中,既考虑网速和相应的问题,也需要考虑自身机器硬件的情况,来设置多进程或者多线程。   3、什么是栈溢出?怎么解决?   因为栈一般默认为1-2m,一旦出现死循环或者是大量的递归调用,在不断的压栈过程中,造成栈容量超过1m而导致溢出。   栈溢出的情况有两种:1)局部数组过大。当函数内部数组过大时

scrapy 增量式

≯℡__Kan透↙ 提交于 2020-03-23 19:00:16
scrapy 增量式 前言 首先 通常我们的爬虫都是一次性。应用场景并不多 概念 用于检测网站的数据跟新并实时抓取数据 核心机制 (去除重复数据) 去重 利用reids的set实现去重 一、创建项目 # scrapy startproject zlsPro # cd zlsPro # scrapy genspider -t crawl zls www.xxx.com # scrapy crawl zls 二、配置文件settings文件 ROBOTSTXT_OBEY = False LOG_LERVER='ERROR' USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36" 三、爬虫文件代码实现 爬虫文件 # -*- coding: utf-8 -*- import scrapy from scrapy.linkextractors import LinkExtractor from scrapy.spiders import CrawlSpider, Rule from redis import Redis from zlsPro.items import

python爬虫笔记

混江龙づ霸主 提交于 2020-03-23 10:17:18
##爬虫 -通用网络爬虫 其的主要目的是将互联网上的资源下载到本地形成一个镜像备份。类似百度等搜索引擎 -聚焦爬虫 其面向特定需求的爬虫程序,与通用爬虫的区别在于对数据进行筛选尽量爬取相关数据 -爬虫优化 1.尽量减少请求次数 2.web页面不好爬取时爬app和h5页面(手机) ##HTTP和HTTPS --超文本传输协议 HTTP 端口80 HTTPS时加入了ssl安全传输协议 端口443 ##get请求方式获取 ---get方式一般用于向服务器获取数据 --parse用于url编码 实际使用是将url地址与想要查询的数据信息拼接形成完整地url 例如 # https://tieba.baidu.com/f?ie=utf-8&kw=火影忍者&fr=search # https://tieba.baidu.com/f?kw=火影忍者&ie=utf-8&pn=50 base_url = 'http://wwww.baidu.com/f?' # 搜索信息关键字 wd = input('搜索信息关键字') pn = input('pn值') q_data = { 'wd' = wd, 'pn' = pn, } # 对q_data进行编码使用parse模块 q_data = parse.urlencode(q_data) # 拼接url full_url = base_url + q