236day(股票数据Scrapy爬虫)

本文介绍了一个使用Scrapy框架实现的股票数据爬虫项目。该爬虫从东方财富网抓取股票列表,并进一步获取每只股票的详细信息。通过解析网页内容,提取关键数据并保存到文件中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《2018年6月3日》【连续236天】

标题:股票数据Scrapy爬虫;

内容:

按步骤建立工程,爬虫后,

stock.py代码:
 

import scrapy
import re
 
 
class StocksSpider(scrapy.Spider):
    name = "stocks"
    start_urls = ['http://quote.eastmoney.com/stocklist.html']
 
    def parse(self, response):
        for href in response.css('a::attr(href)').extract():
            try:
                stock = re.findall(r"[s][hz]\d{6}", href)[0]
                url = 'http://gupiao.baidu.com/stock/' + stock + '.html'
                yield scrapy.Request(url, callback=self.parse_stock)
            except:
                continue
 
    def parse_stock(self, response):
        infoDict = {}
        stockInfo = response.css('.stock-bets')
        name = stockInfo.css('.bets-name').extract()[0]
        keyList = stockInfo.css('dt').extract()
        valueList = stockInfo.css('dd').extract()
        for i in range(len(keyList)):
            key = re.findall(r'>.*</dt>', keyList[i])[0][1:-5]
            try:
                val = re.findall(r'\d+\.?.*</dd>', valueList[i])[0][0:-5]
            except:
                val = '--'
            infoDict[key]=val
 
        infoDict.update(
            {'股票名称': re.findall('\s.*\(',name)[0].split()[0] + \
             re.findall('\>.*\<', name)[0][1:-1]})
        yield infoDict

pipelines.py:
 

 

class BaidustocksPipeline(object):
    def process_item(self, item, spider):
        return item
 
class BaidustocksInfoPipeline(object):
    def open_spider(self, spider):
        self.f = open('BaiduStockInfo.txt', 'w')
 
    def close_spider(self, spider):
        self.f.close()
 
    def process_item(self, item, spider):
        try:
            line = str(dict(item)) + '\n'
            self.f.write(line)
        except:
            pass
        return item

再将setting.py中一行代码修改:

ITEM_PIPELINES = {
    'BaiduStocks.pipelines.BaidustocksInfoPipeline': 300,
}

 

 

 

### Scrapy 爬虫框架的数据存储方法 在使用 Scrapy 框架进行网络爬虫开发时,数据存储是整个流程中的关键环节。Scrapy 提供了多种方式将爬取到的数据存储到不同的目标中,如文件、数据库等。以下是几种常见的数据存储方法及其实现步骤。 #### 1. 数据存储到 JSON 文件 Scrapy 内置支持将爬取的数据导出为 JSON 文件,这是最简单且常用的方式之一。通过设置 `FEEDS` 参数,可以轻松实现这一功能。 ```python # 在 settings.py 中配置 FEEDS = { 'items.json': {'format': 'json', 'encoding': 'utf8', 'overwrite': True}, } ``` 上述代码会将爬取到的数据保存为名为 `items.json` 的文件[^1]。 #### 2. 数据存储到 CSV 文件 与 JSON 类似,Scrapy 也支持将数据导出为 CSV 格式,便于后续导入 Excel 或其他数据分析工具。 ```python # 在 settings.py 中配置 FEEDS = { 'items.csv': {'format': 'csv', 'encoding': 'utf8', 'overwrite': True}, } ``` #### 3. 数据存储到 MongoDB 数据库 对于需要长期存储和查询的数据,MongoDB 是一个不错的选择。可以通过自定义管道(pipelines.py)来实现数据存储。 首先,确保已安装 pymongo 库: ```bash pip install pymongo ``` 然后,在 `pipelines.py` 中定义 MongoDB 存储逻辑: ```python import pymongo from itemadapter import ItemAdapter class MongoDBPipeline: def __init__(self, mongo_uri, mongo_db): self.mongo_uri = mongo_uri self.mongo_db = mongo_db @classmethod def from_crawler(cls, crawler): return cls( mongo_uri=crawler.settings.get('MONGO_URI'), mongo_db=crawler.settings.get('MONGO_DATABASE') ) def open_spider(self, spider): self.client = pymongo.MongoClient(self.mongo_uri) self.db = self.client[self.mongo_db] def close_spider(self, spider): self.client.close() def process_item(self, item, spider): collection_name = 'weather_data' # 集合名称 self.db[collection_name].insert_one(ItemAdapter(item).asdict()) return item ``` 最后,在 `settings.py` 中启用该管道并配置 MongoDB 连接信息: ```python ITEM_PIPELINES = { 'your_project.pipelines.MongoDBPipeline': 300, } MONGO_URI = 'mongodb://localhost:27017/' MONGO_DATABASE = 'scrapy_data' ``` #### 4. 数据存储到 MySQL 数据库 如果需要将数据存储到关系型数据库中,MySQL 是一个常见的选择。同样需要自定义管道来实现。 首先,确保已安装 pymysql 库: ```bash pip install pymysql ``` 然后,在 `pipelines.py` 中定义 MySQL 存储逻辑: ```python import pymysql from itemadapter import ItemAdapter class MySQLPipeline: def __init__(self, host, port, user, password, database): self.host = host self.port = port self.user = user self.password = password self.database = database @classmethod def from_crawler(cls, crawler): return cls( host=crawler.settings.get('MYSQL_HOST'), port=crawler.settings.get('MYSQL_PORT'), user=crawler.settings.get('MYSQL_USER'), password=crawler.settings.get('MYSQL_PASSWORD'), database=crawler.settings.get('MYSQL_DATABASE') ) def open_spider(self, spider): self.connection = pymysql.connect( host=self.host, port=self.port, user=self.user, password=self.password, database=self.database, charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor ) self.cursor = self.connection.cursor() def close_spider(self, spider): self.connection.close() def process_item(self, item, spider): sql = "INSERT INTO weather (city, day, weather, t_Max, t_Low, power) VALUES (%s, %s, %s, %s, %s, %s)" values = ( item['city'], item['day'], item['weather'], item['t_Max'], item['t_Low'], item['power'] ) self.cursor.execute(sql, values) self.connection.commit() return item ``` 最后,在 `settings.py` 中启用该管道并配置 MySQL 连接信息: ```python ITEM_PIPELINES = { 'your_project.pipelines.MySQLPipeline': 300, } MYSQL_HOST = 'localhost' MYSQL_PORT = 3306 MYSQL_USER = 'root' MYSQL_PASSWORD = 'password' MYSQL_DATABASE = 'scrapy_data' ``` #### 5. 数据存储到 Elasticsearch Elasticsearch 是一种强大的全文搜索引擎,适合存储和检索大量结构化或非结构化数据。 首先,确保已安装 elasticsearch 库: ```bash pip install elasticsearch ``` 然后,在 `pipelines.py` 中定义 Elasticsearch 存储逻辑: ```python from elasticsearch import Elasticsearch from itemadapter import ItemAdapter class ElasticsearchPipeline: def __init__(self, es_hosts, index_name): self.es_hosts = es_hosts self.index_name = index_name @classmethod def from_crawler(cls, crawler): return cls( es_hosts=crawler.settings.get('ELASTICSEARCH_HOSTS'), index_name=crawler.settings.get('ELASTICSEARCH_INDEX') ) def open_spider(self, spider): self.client = Elasticsearch(self.es_hosts) def close_spider(self, spider): pass def process_item(self, item, spider): self.client.index(index=self.index_name, body=ItemAdapter(item).asdict()) return item ``` 最后,在 `settings.py` 中启用该管道并配置 Elasticsearch 连接信息: ```python ITEM_PIPELINES = { 'your_project.pipelines.ElasticsearchPipeline': 300, } ELASTICSEARCH_HOSTS = ['http://localhost:9200'] ELASTICSEARCH_INDEX = 'weather_data' ``` ### 总结 以上介绍了几种常见的 Scrapy 数据存储方法,包括 JSON 文件、CSV 文件、MongoDB 数据库、MySQL 数据库以及 Elasticsearch。开发者可以根据实际需求选择合适的存储方式,并通过自定义管道实现复杂的数据处理逻辑[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值