爬虫div下的中文怎么提取_想用爬虫获取自己的数据吗

e4ea513c1817326211d2d2f561efcd7a.png

Scrapy是用纯Python实现的一个为了爬取网站数据、提取结构性数据的应用框架,用途非常广泛。通过定制开发几个模块我们就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非常之方便。本文我们利用Scrapy获取某基金网站数据,为自己进行数据分析、挖掘甚至自己理财获得第一手矿。

本文省略Scrapy的安装,可参照Scrapy的中文社区网站

win7安装scrapy_Scrapy1.5中文文档_Scrapy 中文网​www.scrapyd.cn
6e42634fd1858179eaa62317990f03a0.png

一、项目创建

  1. 首先我们需要创建一个项目,在这个项目向下我们可以创建自己的爬虫,一个项目中可以创建多个爬虫。这里建立一个名为gold_mine的项目,“金矿”后面我们要用到这些数据进行分析和挖掘,我们姑且就叫“金矿”吧。
scrapy startproject gold_mine

这里我们就创建了一个项目,项目内容如下

c3c848e1d709628676593493d454c5a3.png

Scrapy框架的整体以及运行逻辑图如下图所示

cae80e29ff2b219fbc6646967d27e975.png

Scrapy (引擎): 为整个框架的枢纽站,负责Spider(我们写的爬虫)、ItemPipeline、Downloader、Scheduler之间的的通讯,信号、数据传递等。

Scheduler(调度器): 负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。

Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理,

Spider(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器),

Item Pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方.

Downloader Middlewares(下载中间件):可用于扩展下载功能。

Spider Middlewares(Spider中间件):可以理解为是一个可以自定扩展和操作引擎和Spider中间通信的功能组件(比如进入Spider的Responses;和从Spider出去的Requests)。

在初级阶段我们基本只需要接触Spider、Item Pipeline,对应我们新建项目,也就是spider、items、pipelines以及setting

73bd118fc865dc3c90be0e76a4d81596.png

二. 创建完项目后我们就开始创建我们的爬虫

scrapy genspider ddfund fund.eastmoney.com

2.1. 编写Item:

class DdfundItem(scrapy.Item):
    # define the fields for your item here like:
    funding_date = scrapy.Field()  # 成立日期
    manager = scrapy.Field()  # 基金经理
    type = scrapy.Field()  # 基金类型
    company = scrapy.Field()  # 基金管理公司
    assets = scrapy.Field()  # 资产规模
    code = scrapy.Field()  # 基金代码

2.2. 编写我们的爬虫

这里为了获得加载完全的基金数据,使用了Selenium自动化测试工具Webdriver(详细如何用暂不细说,已有有机会再写吧)。可以获得如下加载后的页面。这里主要是为了获得基金的代码,以进一步获得基金的收益信息。

b7147a66b41984a907a864e97ca7e540.png
class DdfundspiderSpider(scrapy.Spider):
    name = 'ddfundspider'
    allowed_domains = ['fund.eastmoney.com']
    start_urls = ['http://fund.eastmoney.com/fund.html#os_0;isall_1;ft_|;pt_1']
    base_url = 'http://fundf10.eastmoney.com/jndzf_{0}.html'
    browser = webdriver.Chrome()

    def parse(self, response):
        item = DdfundItem()
        all_fundcode = response.xpath('//*[@id="bodydiv"]/div[8]/div[3]/div[1]/div[2]/p/*')
        item['code'] = response.xpath('//*[ @ id = "bodydiv"]/div[8]/div[3]/div[1]/div[1]/div[1]/h4/a/text()').extract()[0]
        item['funding_date'] = all_fundcode[0].xpath('./span/text()').extract()[0]
        item['manager'] = all_fundcode[1].xpath('./a/text()').extract()[0]
        item['type'] = all_fundcode[2].xpath('./span/text()').extract()[0]
        item['company'] = all_fundcode[3].xpath('./a/text()').extract()[0]
        item['assets'] = all_fundcode[4].xpath('./span/text()').extract()[0]
        yield item

    '''
    初始页面,获取所有基金的基本信息。重写框架的的start_requests,以获得我们需要的基金代码,生产新的请求地址。
    '''
    def start_requests(self):
        print('n**********************************n'
              'n爬虫进入初始页面,获取所有基金代码n'
              'n**********************************n')
        browser = webdriver.Chrome()
        browser.get(self.start_urls[0])
        fund_codes = browser.find_elements_by_xpath('//*[@id="oTable"]/tbody/*')
        for code in fund_codes:
            print('n进入基金:{0}访问页面'.format(code.find_element_by_xpath('./td[4]').text))
            yield Request(self.base_url.format(code.find_element_by_xpath('./td[4]').text), dont_filter=True)
        browser.close()

通过parse函数我们可以获得基金的名称、基金代码等基本信息:

47105eb43f5758e2a1f445eab629a5f7.png

三、爬取信息的处理(item)

3.1 通过爬虫爬取的数据我们需要进行持久化保存,也就是说存到本地数据库或者CSV等文档中。而此任务我们可以交给pipeline了也就是我们工程中的pipelines.py。这里我们将数据直接存储到CSV文件中。

# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html
import csv
import os


class DdfundPipeline(object):

    def __init__(self):
        if os.path.exists('./funding_main_info.csv'):
            os.remove('./funding_main_info.csv')
        self.f = open('./funding_main_info.csv', 'w')
        self.csv_write = csv.writer(self.f, 'excel', lineterminator='n')
        self.csv_write.writerow([ 'funding_date', 'manager', 'type', 'assets',  'code', 'company'])

    def process_item(self, item, spider):
        self.csv_write.writerow((item['funding_date'],
                                 item['manager'],
                                 item['type'],
                                 item['assets'],
                                 item['code'],
                                 item['company']))
        return item

    def close_spider(self, spider):
        self.f.close()

3.2 设置setting文件,利用DdfundPipeline处理item数据

# See https://doc.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
    'ddfund.pipelines.DdfundPipeline': 300,
}

最后可以得到如下数据

3cfaab6340b09fbd3c7cf2bcc6192cbd.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值