题记:早已听闻python爬虫框架的大名。近些天学习了下其中的Scrapy爬虫框架,将自己理解的跟大家分享。有表述不当之处,望大神们斧正。

一、初窥Scrapy

Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。

其最初是为了 页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。

本文档将通过介绍Scrapy背后的概念使您对其工作原理有所了解, 并确定Scrapy是否是您所需要的。

当您准备好开始您的项目后,您可以参考 入门教程 。

二、Scrapy安装介绍

Scrapy框架运行平台及相关辅助工具

  • Python 2.7(Python最新版3.5,这里选择了2.7版本)
  • Python Package: pip and setuptools. 现在 pip 依赖 setuptools ,如果未安装,则会自动安装setuptools 。
  • lxml. 大多数Linux发行版自带了lxml。如果缺失,请查看http://lxml.de/installation.html
  • OpenSSL. 除了Windows(请查看 平台安装指南)之外的系统都已经提供。

您可以使用pip来安装Scrapy(推荐使用pip来安装Python package).

pip install Scrapy

Windows下安装流程:

1、安装Python 2.7之后,您需要修改 PATH 环境变量,将Python的可执行程序及额外的脚本添加到系统路径中。将以下路径添加到 PATH 中:

C:\Python27\;C:\Python27\Scripts\;

除此之外,还可以用cmd命令来设置Path:

c:\python27\python.exe c:\python27\tools\scripts\win_add2path.py

安装配置完成之后,可以执行命令python --version查看安装的python版本。(如图所示)

2、从 http://sourceforge.net/projects/pywin32/ 安装 pywin32

请确认下载符合您系统的版本(win32或者amd64)

从 https://pip.pypa.io/en/latest/installing.html 安装 pip

3、打开命令行窗口,确认 pip 被正确安装:

pip --version

4、到目前为止Python 2.7 及 pip 已经可以正确运行了。接下来安装Scrapy:

pip install Scrapy

至此windows下Scrapy安装已经结束。

三、Scrapy入门教程

1、在cmd中创建Scrapy项目工程。

scrapy startproject tutorial

H:\python\scrapyDemo>scrapy startproject tutorial
New Scrapy project 'tutorial', using template directory 'f:\\python27\\lib\\site-packages\\scrapy\\templates\\project', created in:
H:\python\scrapyDemo\tutorial You can start your first spider with:
cd tutorial
scrapy genspider example example.com

2、文件目录结构如下:

解析scrapy框架结构:

  • scrapy.cfg: 项目的配置文件。
  • tutorial/: 该项目的python模块。之后您将在此加入代码。
  • tutorial/items.py: 项目中的item文件。
  • tutorial/pipelines.py: 项目中的pipelines文件。
  • tutorial/settings.py: 项目的设置文件。
  • tutorial/spiders/: 放置spider代码的目录。

3、编写简单的爬虫

1、在item.py中配置需采集页面的字段实例。

 # -*- coding: utf- -*-

 # Define here the models for your scraped items
#
# See documentation in:
# http://doc.scrapy.org/en/latest/topics/items.html import scrapy
from scrapy.item import Item, Field class TutorialItem(Item):
title = Field()
author = Field()
releasedate = Field()

2、在tutorial/spiders/spider.py中书写要采集的网站以及分别采集各字段。

 # -*-coding:utf-8-*-
import sys
from scrapy.linkextractors.sgml import SgmlLinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from tutorial.items import TutorialItem reload(sys)
sys.setdefaultencoding("utf-8") class ListSpider(CrawlSpider):
# 爬虫名称
name = "tutorial"
# 设置下载延时
download_delay = 1
# 允许域名
allowed_domains = ["news.cnblogs.com"]
# 开始URL
start_urls = [
"https://news.cnblogs.com"
]
# 爬取规则,不带callback表示向该类url递归爬取
rules = (
Rule(SgmlLinkExtractor(allow=(r'https://news.cnblogs.com/n/page/\d',))),
Rule(SgmlLinkExtractor(allow=(r'https://news.cnblogs.com/n/\d+',)), callback='parse_content'),
) # 解析内容函数
def parse_content(self, response):
item = TutorialItem() # 当前URL
title = response.selector.xpath('//div[@id="news_title"]')[0].extract().decode('utf-8')
item['title'] = title author = response.selector.xpath('//div[@id="news_info"]/span/a/text()')[0].extract().decode('utf-8')
item['author'] = author releasedate = response.selector.xpath('//div[@id="news_info"]/span[@class="time"]/text()')[0].extract().decode(
'utf-8')
item['releasedate'] = releasedate yield item

3、在tutorial/pipelines.py管道中保存数据。

 # -*- coding: utf-8 -*-

 # Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html
import json
import codecs class TutorialPipeline(object):
def __init__(self):
self.file = codecs.open('data.json', mode='wb', encoding='utf-8')#数据存储到data.json def process_item(self, item, spider):
line = json.dumps(dict(item)) + "\n"
self.file.write(line.decode("unicode_escape")) return item

4、tutorial/settings.py中配置执行环境。

 # -*- coding: utf-8 -*-

 BOT_NAME = 'tutorial'

 SPIDER_MODULES = ['tutorial.spiders']
NEWSPIDER_MODULE = 'tutorial.spiders' # 禁止cookies,防止被ban
COOKIES_ENABLED = False
COOKIES_ENABLES = False # 设置Pipeline,此处实现数据写入文件
ITEM_PIPELINES = {
'tutorial.pipelines.TutorialPipeline': 300
} # 设置爬虫爬取的最大深度
DEPTH_LIMIT = 100

5、新建main文件执行爬虫代码。

 from scrapy import cmdline
cmdline.execute("scrapy crawl tutorial".split())

最终,执行main.py后在data.json文件中获取到采集结果的json数据。

Python之Scrapy爬虫框架安装及简单使用的更多相关文章

  1. windows下使用python的scrapy爬虫框架,爬取个人博客文章内容信息

    scrapy作为流行的python爬虫框架,简单易用,这里简单介绍如何使用该爬虫框架爬取个人博客信息.关于python的安装和scrapy的安装配置请读者自行查阅相关资料,或者也可以关注我后续的内容. ...

  2. Python之Scrapy爬虫框架 入门实例(一)

    一.开发环境 1.安装 scrapy 2.安装 python2.7 3.安装编辑器 PyCharm 二.创建scrapy项目pachong 1.在命令行输入命令:scrapy startproject ...

  3. 【python】Scrapy爬虫框架入门

    说明: 本文主要学习Scrapy框架入门,介绍如何使用Scrapy框架爬取页面信息. 项目案例:爬取腾讯招聘页面 https://hr.tencent.com/position.php?&st ...

  4. Python使用Scrapy爬虫框架全站爬取图片并保存本地(妹子图)

    大家可以在Github上clone全部源码. Github:https://github.com/williamzxl/Scrapy_CrawlMeiziTu Scrapy官方文档:http://sc ...

  5. 【网络爬虫】【python】网络爬虫(四):scrapy爬虫框架(架构、win/linux安装、文件结构)

    scrapy框架的学习,目前个人觉得比较详尽的资料主要有两个: 1.官方教程文档.scrapy的github wiki: 2.一个很好的scrapy中文文档:http://scrapy-chs.rea ...

  6. Python爬虫教程-31-创建 Scrapy 爬虫框架项目

    本篇是介绍在 Anaconda 环境下,创建 Scrapy 爬虫框架项目的步骤,且介绍比较详细 Python爬虫教程-31-创建 Scrapy 爬虫框架项目 首先说一下,本篇是在 Anaconda 环 ...

  7. python3.7.1安装Scrapy爬虫框架

    python3.7.1安装Scrapy爬虫框架 环境:win7(64位), Python3.7.1(64位) 一.安装pyhthon 详见Python环境搭建:http://www.runoob.co ...

  8. 安装scrapy 爬虫框架

    安装scrapy 爬虫框架 个人根据学习需要,在Windows搭建scrapy爬虫框架,搭建过程种遇到个别问题,共享出来作为记录. 1.安装python 2.7 1.1下载 下载地址 1.2配置环境变 ...

  9. Scrapy爬虫框架(实战篇)【Scrapy框架对接Splash抓取javaScript动态渲染页面】

    (1).前言 动态页面:HTML文档中的部分是由客户端运行JS脚本生成的,即服务器生成部分HTML文档内容,其余的再由客户端生成 静态页面:整个HTML文档是在服务器端生成的,即服务器生成好了,再发送 ...

随机推荐

  1. C#实现Dll(OCX)控件自动注册的两种方法 网上找的 然后 自己试了试 还是可以用的

    尽管MS为我们提供了丰富的.net framework库,我们的程序C#开发带来了极大的便利,但是有时候,一些特定功能的控件库还是需要由第三方提供或是自己编写.当需要用到Dll引用的时候,我们通常会通 ...

  2. 提权GrantPrivilege

    大概一个多月前学习了提权的知识,当时一直不知道提权到底具体是为了干什么.只是模糊的知道提高权限,获得别的进程的一些东西.后来慢慢的学习的多了,知道了一个叫做ReadProcessMemory的函数,第 ...

  3. Html注册表单示例

    注册表单示例,出自<网页开发手记:Html,CSS,JavaScript实战详解>.   <html>   <head>   <title>注册表单&l ...

  4. js中array的join和concat的区别

    首先:concat方法定义:concat() 方法用于连接两个或多个数组.该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本.举例说明:1 /*concat()结果返回的是一个数组*/ 2 3 ...

  5. tcp协议头窗口,滑动窗口,流控制,拥塞控制关系

    参考文章 TCP 的那些事儿(下) http://coolshell.cn/articles/11609.html tcp/ip详解--拥塞控制 & 慢启动 快恢复 拥塞避免 http://b ...

  6. win10环境下ue4使用游戏手柄输入

    忙里偷闲,趁着源码编译需要好久的时间,把这篇博客补上,来说说怎么在win10环境中,ue4使用游戏手柄输入,也就是gamepad输入. 1.我用的手柄是rapoo v10 这款手柄,连接无线USB之后 ...

  7. XP局域网内专用消息队列

    网上能找到DELPHI消息队列的方法,在XP下试了总是不成功,后来在2003上试就行了,对比发现消息队列属性->安全 2003中多了个用户ANONYMOUS_LOGON. 然后在XP下消息队列属 ...

  8. 常用的CentOS 7系统yum源集合

    常用的CentOS 7系统yum源集合   yum源对于linux系统的安装有非常大的帮助了,下面小编为各位整理了常用的CentOS 7系统yum源集合了,希望这篇文章能够对各位有所帮助的哦.   记 ...

  9. uicollectionview registerclass vs registernib

    当cell是用代码实现的时候用registerclass,当cell是用xib文件实现的时候用registernib

  10. Abstract Factory Step by Step --- 抽象工厂

    抽象工厂是创建型模式的代表,其他的还有单件(Singleton).生成器(Builder).工厂方法(Factory Method)以及原型(Prototype),模式本身没有好坏之分,只有适用不适用 ...