【Python爬虫:Scrapy】 之 PyCharm 搭建Scrapy环境+创建Scrapy项目 实例

一、基本环境

  • win10
  • PyCharm
  • Python 3.6

二、scrapy 环境搭建

安装两个python模块:Twisted、scrapy。在cmd中安装会快捷一点。

  • 安装Twisted: 执行 pip install twisted
  • 安装scrapy:执行 pip install scrapy

【注】安装完成后,执行 pip list 检查以下上述两个模块是否安装成功。

三、在pycharm创建一个Scrapy项目

1.在pycharm中创建一个普通项目(Pure Project 即可),如下图。

2.在cmd中cd至项目所在文件夹,执行 scrapy startproject ScrapyDemo,如下。

【注】也可在pycharm自带的Terminal中执行 crapy startproject ScrapyDemo。

执行完之后,pycharm中的项目如下图

各文件功能解释

../ScrapyDemo/爬虫项目
ScrapyDemo/爬虫文件夹
__init__.py必须存在
items.py字段 可以写需要爬取对象的类
middlewares.py中间件
pipelines.py管道文件
settings.py爬取配置
spiders/开发位置
scrapy.cfg项目配置

四、写一个可以运行的scrapy示例

下面示例的功能是爬取博主第一页博文的基本属性(标题、类型、url、发布时间、阅读量),结果如下图。

1.写完代码后的项目结构如下图。

2.各文件代码

(1)items.py

# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.html

import scrapy

class ArticleItem(scrapy.Item):
    title = scrapy.Field() # 文章标题
    type = scrapy.Field() # 文章类型(原创/转载/翻译)
    url = scrapy.Field() # 文章链接
    date = scrapy.Field() # 文章发布日期
    read_num = scrapy.Field() # 文章阅读量

(2)在 ScrapyDemo / spiders 下新建文件 spiderDemo.py

import scrapy
from ScrapyDemo.items import ArticleItem

class CSDNArticle(scrapy.Spider) :
    name = 'get_scdn_article' # 爬虫名称
    allowed_domains = ['blog.csdn.net/Aibiabcheng'] # 爬虫域
    start_urls = ['https://blog.csdn.net/Aibiabcheng'] # 爬虫地址

    def output_article(self, article_list): # 输出
        for item in article_list :
            print(item['type'], '\t' ,item['title'])
            print(item['date'], '\t', item['read_num'], '\t', item['url'], '\n')

    def parse(self, response) :
        article_list = []
        res = response.xpath('//div[@class=\"article-list\"]/div')
        for item in res :
            try :
                # 获取 文章属性
                type = item.xpath('./h4/a/span/text()').extract()[0]
                url = item.xpath('./h4/a/@href').extract()[0]
                title = item.xpath('./h4/a/span[@class=\'article-type type-1 float-none\']/following::text()').extract()[0].strip()
                date = item.xpath('./div[@class=\'info-box d-flex align-content-center\']/p/span[@class=\'date\']/text()').extract()[0].strip()
                read_num = item.xpath('./div[@class=\'info-box d-flex align-content-center\']/p/span[@class=\'read-num\']/span[@class=\'num\']/text()').extract()[0]
                # 创建对象 并 赋值
                article = ArticleItem()
                article['title'] = title
                article['type'] = type
                article['url'] = url
                article['date'] = date
                article['read_num'] = read_num

                article_list.append(article) # 暂存
            except :
                continue

        self.output_article(article_list) # 输出

(3)修改文件 settings.py.

# Obey robots.txt rules
ROBOTSTXT_OBEY = False # 此处为修改

# 添加如下,按照自己实际的填写
DEFAULT_REQUEST_HEADERS = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.36",
    'Accept': 'image/webp,image/apng,image/*,*/*;q=0.8',
}

(4)在 ScrapyDemo 下新建文件 start.py.

from scrapy import cmdline

cmdline.execute("scrapy crawl get_scdn_article".split()) # get_scdn_article为spiderDemo中的name

3.在 pycharm 中运行 scrapy 项目。

(1)选择“Edit Configurations…”

(2)添加新的 Configurations, 选择 python; 然后进行配置。

 (3)像运行普通python程序一样,执行即可。运行成功如下图。

【注1】:首次运行可能会遇到 error:ModuleNotFoundError: No module named 'win32api'

解决办法:pip install pypiwin32

  • 7
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
【资源说明】 1、基于Scrapy+Redis+Python + Scrapy + redis的分布式爬虫设计源码+项目说明.zip 2、该资源包括项目的全部源码,下载可以直接使用! 3、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 4、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 基于Scrapy+Redis+Python + Scrapy + redis的分布式爬虫设计源码+项目说明.zip # Python_Scrapy_Distributed_Crawler Python基于Scrapy-Redis分布式爬虫设计毕业源码案例设计 ## 开发环境Python + Scrapy框架 + redis数据库 ## 程序开发工具: PyCharm 程序采用 python 开发的 Scrapy 框架来开发,使用 Xpath 技术对下载的网页进行提取解析,运用 Redis 数据库做分布式, 设计并实现了针对当当图书网的分布式爬虫程序,scrapy-redis是一个基于redis的scrapy组件,通过它可以快速实现简单分布式爬虫程序,该组件本质上提供了三大功能: scheduler - 调度器 dupefilter - URL去重规则(被调度器使用) pipeline - 数据持久化 Scrapy是一个比较好用的Python爬虫框架,你只需要编写几个组件就可以实现网页数据的爬取。但是当我们要爬取的页面非常多的时候,单个主机的处理能力就不能满足我们的需求了(无论是处理速度还是网络请求的并发数),这时候分布式爬虫的优势就显现出来。 而Scrapy-Redis则是一个基于Redis的Scrapy分布式组件。它利用Redis对用于爬取的请求(Requests)进行存储和调度(Schedule),并对爬取产生的项目(items)存储以供后续处理使用。scrapy-redi重写了scrapy一些比较关键的代码,将scrapy变成一个可以在多个主机上同时运行的分布式爬虫

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牧心.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值