Scrapy创建爬虫项目——搭建环境、创建项目、爬取内容、保存文件(.txt格式)


前言序锦


为了做比赛,需要从网上爬取数据,所以自己不得不从零基础开始学爬虫,当自己学着从网上爬取一本小说,从网上爬取自己想要的数据后,一步步掌握了爬虫的机理后,开始想着如何去实现爬取一个网站:

  • 首先我们需要了解爬虫的简单框架:
    • 爬虫调度端:启动爬虫,停止爬虫,监视爬虫运行情况;
    • URL管理器:将要爬取的和已经爬取的URL进行管理;可取出待爬取的URL,将其传送给“网页下载器”
    • 网页下载器:将URL指定的网页下载,存储成一个字符串,再传送给“网页解析器”
    • 网页解析器:解析网页可解析出(1)有价值的数据(2)另一方面,每个网页都包含有指定其他网页的URL,解析出来后可以补充进“URL管理器”

清楚了整个流程之后,我就在想,抓取一个网站我们是不是应该可以用一个框架来实现上面分析的所有的模块,因为比如说我想抓取很多网站的时候,这个时候就特别麻烦,你要为每一个你要爬取的网站编写一个爬虫,相当于每次编写爬虫都在搭建一个框架,这样显然效率不高,但是前辈们早已为我们搭好了这个框架,只需要我们耐心的找到,并认真学习领会这个框架-“scrapy


开始进入正题:


  • 安装scrapy
  • 创建第一个scrapy项目
  • 定义你需要的Items
  • 编写存储文件Pipelines将数据保存到txt文件中
  • 编写爬写网站的Spider
  • 设置setting文件
  • 爬取结果

0

  • 安装scrapy
  • 创建第一个scrapy项目
    • 在开始爬取之前,您必须创建一个新的Scrapy项目。进入您打算存储代码的目录中,运行新建命令。例如,我需要在E:\Code Repository\ReptilesCode目录下存放该项目,打开命令窗口,进入该目录,执行以下命令:
      scrapy startproject xminghua
      PS:tutorial可以替换成任何你喜欢的名称,最好是英文
      该命令将会创建包含下列内容的 xminghua目录:
xminghua/
    scrapy.cfg
    xminghua/
        __init__.py
        items.py
        pipelines.py
        settings.py
        spiders/
            __init__.py
            ...

这些文件分别是:

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

    • Item 是保存爬取到的数据的容器;其使用方法和python字典类似,并且提供了额外保护机制来避免拼写错误导致的未定义字段错误。我们需要从想要爬取的网站(这里爬取我的个人网站http://www.xminghua.cn)中获取以下属性:

      # 网站标题
      # 网站类型
      # 网站描述
      # 网站文章
      # 文章名称
      # 文章发布时间
      # 文章内容
      对此,在item中定义相应的字段。编辑xminghua目录中的 items.py 文件:

class XminghuaItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    web_title = scrapy.Field()
    # 网站标题
    web_type = scrapy.Field()
    # 网站类型
    web_url = scrapy.Field()
    # 网站地址
    web_description = scrapy.Field()
    # 网站描述
    # web_article = scrapy.Field()
    # 网站文章
    article_names = scrapy.Field()
    # 文章名称
    article_releasetime = scrapy.Field()
    # 文章发布时间
    article = scrapy.Field()
    # 文章内容
  • 编写存储文件Pipelines将数据保存到txt文件中
    • 编写代码将获取的数据以txt的形式存入到文件中
    • 代码如下:
class XminghuaPipeline(object):
    def process_item(self, item, spider):
        fp = codecs.open('xuminghua.txt', 'w', 'utf-8')
        fp.write(u"网站标题:" + item['web_title'])
        fp.write(u"\r\n网站类型:" + item['web_type'])
        fp.write(u"\r\n网站地址:" + item['web_url'])
        fp.write(u"\r\n网站描述:")
        fp.writelines(item['web_description'])
        fp.write(u"\r\n网站文章:" + u"\r\n文章名称:" + item['article_names'] + u"\r\n文章发布时间:" + item['article_releasetime'])
        fp.write(u"\r\n文章内容:")
        fp.writelines(item['article'])
        fp.close()
        return item
  • 编写爬写网站的Spider
    • Spider是用户编写用于从单个网站(或者一些网站)爬取数据的类。
    • 1、xminghua.py文件:
      • 包含了一个用于下载的初始URL,如何跟进网页中的链接以及如何分析页面中的内容,提取生成 item 的方法。为了创建一个Spider,您必须继承 scrapy.Spider 类,且定义以下三个属性:
      • name:用于区别Spider。该名字必须是唯一的,您不可以为不同的Spider设定相同的名字。
      • start_urls:包含了Spider在启动时进行爬取的url列表。因此,第一个被获取到的页面将是其中之一。后续的URL则从初始的URL获取到的数据中提取。
      • parse() 是spider的一个方法。被调用时,每个初始URL完成下载后生成的Response 对象将会作为唯一的参数传递给该函数。该方法负责解析返回的数据(response data),我这里直接从一个子链进行提取数据并返回,没有进行二级子链的提取,大家需要看的话,可以从这篇文章里面去看,代码里面是重点:Scrapy教程——搭建环境、创建项目、爬取内容、保存文件(txt)
      • 以下是xuminghua.py的全部代码:
# -*- coding: utf-8 -*-
import scrapy
from scrapy import Selector
from xminghua.items import XminghuaItem

class XuminghuaSpider(scrapy.Spider):
    name = 'xuminghua'
    allowed_domains = ['www.xminghua.cn']
    start_urls = ['http://www.xminghua.cn/2017/03/%E5%91%A8%E6%9C%AB%E6%84%89%E5%BF%AB/']

    def parse(self, response):
        Item = XminghuaItem()
        sel = Selector(response)
        Item['web_title'] = sel.xpath('//h1[@class="panel-cover__title panel-title"]/a/text()').extract()[0]
        Item['web_type'] = sel.xpath('//span[@class="panel-cover__subtitle panel-subtitle"]/text()')[0].extract()
        Item['web_url'] = response.url[0:23]
        # description1 = sel.xpath('//div[@class="info-back"]/h2/text()').extract()
        # description12 = sel.xpath('//div[@class="info-back"]/p/text()').extract()
        Item['web_description'] = sel.xpath('//div[@class="info-back"]//text()').extract()
        Item['article_names'] = sel.xpath('//h1[@class="post-title"]/text()').extract()[0]
        Item['article_releasetime'] = sel.xpath('//time[@class="post-meta__date date"]/text()').extract()[0]
        Item['article'] = sel.xpath('//section[@class="post"]//text()').extract()
        yield Item

注意:这里的yield一定不能写成returnreturn表示结束并返回数据,而我们是需要将数据返回到pipelines,然后写入到文件
  • 设置setting文件
    • USER_AGENT = ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36’
    • ITEM_PIPELINES = {
      ‘xminghua.pipelines.XminghuaPipeline’: 300,
      }
    • 如果需要日志输出文件,可以设置LOG_LEVEL和LOG_FILE,具体的可以自己去搜索一下如何设置,我这里设置的是
      • LOG_LEVEL = ‘WARNING’
      • LOG_FILE = ‘xminghua_log.txt’
  • 爬取结果
    • 运行爬虫,在爬虫文件所在文件件(xuminghua.py所在文件夹),打开命令行,输入scrapy crawl xuminghua(xuminghua.py文件中的name所定义的名字,唯一不可替代)
    • 查看结果:
    • xuminghua.txt展示

所以还不知道如何爬取网站以及如何快速简便使用scrapy框架的童鞋们,快快看过来……


PS:这一个月忙着赶比赛,所以更新的周期频率可能没有之前那么快,希望小伙伴们见谅哈^-^

  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

HuaCode

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

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

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

打赏作者

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

抵扣说明:

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

余额充值