简介

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. c#开源项目[转]

    一.AOP框架 Encase 是C#编写开发的为.NET平台提供的AOP框架.Encase 独特的提供了把方面(aspects)部署到运行时代码,而其它AOP框架依赖配置文件的方式.这种部署方面(as ...

  2. 关闭socket连接最好的方法

    最好关闭连接的方法 `C S` `shutdown-WR ` `发送FIN` ` read-0发送ACK` ` ......` ` close` ` 发送FIN` `read-0` `close` ` ...

  3. Spring mvc 返回JSON 在IE 下提示下载 解决办法

    http://www.blogjava.net/iamlibo/archive/2013/11/21/406646.html ————————————————————————————————————— ...

  4. C++ 类的继承三(继承中的构造与析构)

    //继承中的构造与析构 #include<iostream> using namespace std; /* 继承中的构造析构调用原则 1.子类对象在创建时会首先调用父类的构造函数 2.父 ...

  5. 在Servlet处理请求的方式为。(选择1项)

    A.以进程的方式 B.以程序的方式 C.以线程的方式 D.以响应的方式 解答:C

  6. (转自)视频流中的DTS/PTS到底是什么;

     翻译了一下: Q:hi,这可能是一个弱智问题,但是当我使用bbMEG1.24beta17编码时,一直以来总是遇到这个下溢的问题.我从日志文件中得到的唯一启示就是我应该更改mux率...但是帮助文档却 ...

  7. 【BZOJ】1611: [Usaco2008 Feb]Meteor Shower流星雨(bfs)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1611 一眼题,bfs. #include <cstdio> #include <c ...

  8. splash启动速度优化

    在styles.xml中加入 <style name="AppSplash" parent="android:Theme"> <item na ...

  9. 转载:pyqt的signal和solit

    转自:http://blog.csdn.net/hlqyq/article/details/6713828 import sysfrom PyQt5.QtCore import pyqtSignal, ...

  10. amqp server closed the connection. check login credentials socket closed

    rabbit, [ {default_user, <<"guest">>}, {default_pass, <<"guest" ...