Scrapy框架基础

简介

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)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏实用工具入门教程

如何部署 ftp 文件服务

文件传输协议(英文:File Transfer Protocol,缩写:FTP)是用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式。它属于网络传输协...

6833
来自专栏deepcc

IE=edge,chrome=1的META信息详解

4008
来自专栏沃趣科技

【Oracle 12c Flex Cluster专题】—节点角色转换

笔者上一篇译文中在介绍Leaf Node时提到, 虽然leaf node不要求直接访问共享存储,但最好还是连上共享存储,因为说不准未来哪天就要把这个leaf n...

3036
来自专栏菩提树下的杨过

pycharm如何设置python版本、设置国内pip镜像、添加第三方类库

直接上图(mac环境): 一、设置项目的python版本 File->Default Settings ... ? 在弹出的界面上(参考下图),左上角的下拉框里...

5427
来自专栏程序员叨叨叨

【9】全民博客时代的到来——20分钟简要教程

很久以前就想搭建一个个人技术博客的网站了,但是那时候接触的东西不多,没有听说过hexo、jekyll、wordpress等快速blog生成工具,自己在网上找了博...

1293
来自专栏zingpLiu

Nginx(一)安装及启停

    我发现很多博客排版杂乱,表达不清,读者看了往往云里雾里。我此前的博客也是如此,我自己很不满意。今起,每一篇博客都会用心写,此前的博客我也会尽力修改。至少...

2022
来自专栏张戈的专栏

CVE-2015-0235:Linux glibc高危漏洞的检测及修复方法

这几天复习运维知识,也没怎么关注业界新闻,可等我一关注,又“捅娄子”了,Linux 继上次CVE-2014-6271漏洞爆发以来,再次爆发一个严重漏洞:CVE-...

3694
来自专栏GAN&CV

Ubuntu16.04安装opencv2&&ImportError: No module named cv2.cv

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_25737169/article/d...

4233
来自专栏北京马哥教育

Redis数据库安全手册

Redis是一个 高性能的key-value数据库,这两年可谓火的不行。而Redis的流行也带来一系列安全问题,不少攻击者都通过Redis发起攻击。本文将讲解...

3476
来自专栏IT技术精选文摘

高可用负载均衡:开源PaaS Rainbond组件Rainbond-Entrance揭秘

852

扫码关注云+社区

领取腾讯云代金券