简介

Scrapy是一个高级的Python爬虫框架,它不仅包含了爬虫的特性,还可以方便的将爬虫数据保存到csv、json等文件中。

首先我们安装Scrapy。

其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中。其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。

Scrapy 使用了 Twisted异步网络库来处理网络通讯。整体架构大致如下

安装

linux或者mac

pip3 install scrapy

windows

#下载twisted
http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted #安装wheel模块之后才能安装.whl文件
pip3 install wheel #安装twisted
pip install Twisted‑18.4.0‑cp36‑cp36m‑win_amd64.whl pip3 install pywin32 #安装scrapy
pip3 install scrapy

使用

创建项目

格式:scrapy startproject 项目名

scrapy  startproject spider

创建项目之后就会生成一个目录,如下:

项目名称/
- spiders # 爬虫文件
- chouti.py
- cnblgos.py
....
- items.py # 持久化
- pipelines # 持久化
- middlewares.py # 中间件
- settings.py # 配置文件(爬虫)
scrapy.cfg # 配置文件(部署)

  

创建爬虫

格式:

cd 项目名

scrapy genspider 爬虫名  将要爬的网站

cd spider

scrapy genspider chouti chouti.com

创建完爬虫之后会在spiders文件夹里生成一个文件

打开chouti.py之后如下:

运行爬虫

scrapy crawl chouti
scrapy crawl chouti --nolog # 不打印日志

示例

# -*- coding: utf-8 -*-
import scrapy class ChoutiSpider(scrapy.Spider):
'''
爬去抽屉网的帖子信息
'''
name = 'chouti'
allowed_domains = ['chouti.com']
start_urls = ['http://chouti.com/'] def parse(self, response):
# 获取帖子列表的父级div
content_div = response.xpath('//div[@id="content-list"]') # 获取帖子item的列表
items_list = content_div.xpath('.//div[@class="item"]') # 打开一个文件句柄,目的是为了将获取的东西写入文件
with open('articles.log','a+',encoding='utf-8') as f:
# 循环item_list
for item in items_list:
# 获取每个item的第一个a标签的文本和url链接
text = item.xpath('.//a/text()').extract_first()
href = item.xpath('.//a/@href').extract_first()
# print(href, text.strip())
# print('-'*100)
f.write(href+'\n')
f.write(text.strip()+'\n')
f.write('-'*100+'\n') # 获取分页的页码,然后让程序循环爬去每个链接
# 页码标签对象列表
page_list = response.xpath('//div[@id="dig_lcpage"]')
# 循环列表
for page in page_list:
# 获取每个标签下的a标签的url,即每页的链接
page_a_url = page.xpath('.//a/@href').extract()
# 将域名和url拼接起来
page_url = 'https://dig.chouti.com' + page_a_url # 重要的一步!!!!
# 导入Request模块,然后实例化一个Request对象,然后yield它
# 就会自动执行Request对象的callback方法,爬去的是url参数中的链接
from scrapy.http import Request
yield Request(url=page_url,callback=self.parse)

  

网络爬虫值scrapy框架基础的更多相关文章

  1. Python网络爬虫之Scrapy框架(CrawlSpider)

    目录 Python网络爬虫之Scrapy框架(CrawlSpider) CrawlSpider使用 爬取糗事百科糗图板块的所有页码数据 Python网络爬虫之Scrapy框架(CrawlSpider) ...

  2. 16.Python网络爬虫之Scrapy框架(CrawlSpider)

    引入 提问:如果想要通过爬虫程序去爬取”糗百“全站数据新闻数据的话,有几种实现方法? 方法一:基于Scrapy框架中的Spider的递归爬取进行实现(Request模块递归回调parse方法). 方法 ...

  3. 16,Python网络爬虫之Scrapy框架(CrawlSpider)

    今日概要 CrawlSpider简介 CrawlSpider使用 基于CrawlSpider爬虫文件的创建 链接提取器 规则解析器 引入 提问:如果想要通过爬虫程序去爬取”糗百“全站数据新闻数据的话, ...

  4. 网络爬虫之scrapy框架设置代理

    前戏 os.environ()简介 os.environ()可以获取到当前进程的环境变量,注意,是当前进程. 如果我们在一个程序中设置了环境变量,另一个程序是无法获取设置的那个变量的. 环境变量是以一 ...

  5. 网络爬虫之scrapy框架(CrawlSpider)

    一.简介 CrawlSpider其实是Spider的一个子类,除了继承到Spider的特性和功能之外,还派生了其自己独有的更强大的特性和功能.其中最显著的功能就是"LinkExtractor ...

  6. 网络爬虫之scrapy框架详解

    twisted介绍 Twisted是用Python实现的基于事件驱动的网络引擎框架,scrapy正是依赖于twisted, 它是基于事件循环的异步非阻塞网络框架,可以实现爬虫的并发. twisted是 ...

  7. 爬虫之Scrapy框架介绍及基础用法

    今日内容概要 爬虫框架之Scrapy 利用该框架爬取博客园 并发编程 今日内容详细 爬虫框架Scrapy 1.什么是框架? 框架类似于房子的结构,框架会提前帮你创建好所有的文件和内部环境 你只需要往对 ...

  8. Python逆向爬虫之scrapy框架,非常详细

    爬虫系列目录 目录 Python逆向爬虫之scrapy框架,非常详细 一.爬虫入门 1.1 定义需求 1.2 需求分析 1.2.1 下载某个页面上所有的图片 1.2.2 分页 1.2.3 进行下载图片 ...

  9. 爬虫之scrapy框架

    解析 Scrapy解释 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了页面抓取 (更确切来说, 网络抓 ...

随机推荐

  1. 配置ubuntu - tftp server服务器步骤

    配置Ubuntu tftp服务的步骤: 1.安装相关软件包:Ubuntu tftp(服务端),tftp(客户端),xinetd sudo apt-get install tftpd tftp xine ...

  2. Scala中集合类型与java中集合类型转换

    对于java中的集合元素并不能在scala中拿来就用的,需要进行相应的转换. 1. 转换规则如下 从下面可以看出,有些可以相互转换的,有些只能单向转换: scala.collection.Iterab ...

  3. 02 java 程序环境

    java 安装与设置 1. 安装 jdk 2. 设置执行路径 unix: set path=(/usr/local/jdk/bin $path) ( 在~/.cshrc文件里增加) linux: ex ...

  4. post 获取checkbox值

    $str_tag=""; $s=$_POST['goods_server_name']; for($i=0;$i<count($s);$i++){ if($i==0){ $s ...

  5. 第二百四十六节,Bootstrap弹出框和警告框插件

    Bootstrap弹出框和警告框插件 学习要点: 1.弹出框 2.警告框 本节课我们主要学习一下 Bootstrap 中的弹出框和警告框插件. 一.弹出框 弹出框即点击一个元素弹出一个包含标题和内容的 ...

  6. 关于ie中实现弹性盒模型-我的css

    css3中的弹性盒模型大家都不陌生,但是能否在ie6中实现呢?第三方库中涉及到的页少之又少,也有一部分css框架中支持各种布局,下面给出我用的盒模型样式(为了以后copy方便而已): /******* ...

  7. JAVA增删改查XML文件

    最近总是需要进行xml的相关操作. 不免的要进行xml的读取修改等,于是上网搜索,加上自己的小改动,整合了下xml的常用操作. 读取XML配置文件 首先我们需要通过DocumentBuilderFac ...

  8. Spring_day01--课程安排_Spring概念_IOC操作&IOC底层原理&入门案例_配置文件没有提示问题

    Spring_day01 Spring课程安排 今天内容介绍 Spring概念 Spring的ioc操作 IOC底层原理 IOC入门案例 配置文件没有提示问题 Spring的bean管理(xml方式) ...

  9. Fragment遇到的坑

    Fragment不要通过构造传参,要么就是bundle,要么就通过activity临时存一下,不然debug编译没问题release编译不过

  10. java中计算时间差

    Calendar cale = null; SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss" ...