成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

爬蟲框架Scrapy實(shí)戰(zhàn)一——股票數(shù)據(jù)爬取

Ilikewhite / 2401人閱讀

摘要:技術(shù)路線爬蟲框架語言由于在上一篇博客中已經(jīng)介紹了股票信息爬取的原理,在這里不再進(jìn)行過多介紹,如需了解可以參考博客鏈接描述,在本篇文章中主要講解該項(xiàng)目在框架中如何實(shí)現(xiàn)。

簡介

目標(biāo): 獲取上交所和深交所所有股票的名稱和交易信息。
輸出: 保存到文件中。
技術(shù)路線:Scrapy爬蟲框架
語言: python3.5
由于在上一篇博客中已經(jīng)介紹了股票信息爬取的原理,在這里不再進(jìn)行過多介紹,如需了解可以參考博客:鏈接描述,在本篇文章中主要講解該項(xiàng)目在Scrapy框架中如何實(shí)現(xiàn)。

原理分析

Scrapy框架如下圖所示:

我們主要進(jìn)行兩步操作:
(1) 首先需要在框架中編寫一個(gè)爬蟲程序spider,用于鏈接爬取和頁面解析;
(2) 編寫pipelines,用于處理解析后的股票數(shù)據(jù)并將這些數(shù)據(jù)存儲(chǔ)到文件中。

代碼編寫

步驟:
(1) 建立一個(gè)工程生成Spider模板
打開cmd命令行,定位到項(xiàng)目所放的路徑,輸入:scrapy startproject BaiduStocks,此時(shí)會(huì)在目錄中新建一個(gè)名字為BaiduStocks的工程。再輸入:cd BaiduStocks進(jìn)入目錄,接著輸入:scrapy genspider stocks baidu.com生成一個(gè)爬蟲。之后我們可以在spiders/目錄下看到一個(gè)stocks.py文件,如下圖所示:

(2) 編寫Spider:配置stocks.py文件,修改返回頁面的處理,修改對(duì)新增URL爬取請(qǐng)求的處理
打開stocks.py文件,代碼如下所示:

# -*- coding: utf-8 -*-
import scrapy


class StocksSpider(scrapy.Spider):
    name = "stocks"
    allowed_domains = ["baidu.com"]
    start_urls = ["http://baidu.com/"]

    def parse(self, response):
        pass

將上述代碼修改如下:

# -*- coding: utf-8 -*-
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 = "https://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">.*", keyList[i])[0][1:-5]
            try:
                val = re.findall(r"d+.?.*", 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

(3) 配置pipelines.py文件,定義爬取項(xiàng)(Scraped Item)的處理類
打開pipelinse.py文件,如下圖所示:

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

# Define your item pipelines here
#
# Don"t forget to add your pipeline to the ITEM_PIPELINES setting
# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html


class BaidustocksPipeline(object):
    def process_item(self, item, spider):
        return item

對(duì)上述代碼修改如下:

# -*- coding: utf-8 -*-
 
# Define your item pipelines here
#
# Don"t forget to add your pipeline to the ITEM_PIPELINES setting
# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html
 
 
class BaidustocksPipeline(object):
    def process_item(self, item, spider):
        return item

#每個(gè)pipelines類中有三個(gè)方法
class BaidustocksInfoPipeline(object):
    #當(dāng)一個(gè)爬蟲被調(diào)用時(shí),對(duì)應(yīng)的pipelines啟動(dòng)的方法
    def open_spider(self, spider):
        self.f = open("BaiduStockInfo.txt", "w")
    #一個(gè)爬蟲關(guān)閉或結(jié)束時(shí)的pipelines對(duì)應(yīng)的方法
    def close_spider(self, spider):
        self.f.close()
    #對(duì)每一個(gè)Item項(xiàng)進(jìn)行處理時(shí)所對(duì)應(yīng)的方法,也是pipelines中最主體的函數(shù)
    def process_item(self, item, spider):
        try:
            line = str(dict(item)) + "
"
            self.f.write(line)
        except:
            pass
        return item

(4) 修改settings.py,是框架找到我們?cè)?b>pipelinse.py中寫的類
settings.py中加入:

# Configure item pipelines
# See http://scrapy.readthedocs.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
    "BaiduStocks.pipelines.BaidustocksInfoPipeline": 300,
}

到這里,程序就完成了。

(4) 執(zhí)行程序
在命令行中輸入:scrapy crawl stocks

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/25596.html

相關(guān)文章

  • 首次公開,整理12年積累的博客收藏夾,零距離展示《收藏夾吃灰》系列博客

    摘要:時(shí)間永遠(yuǎn)都過得那么快,一晃從年注冊(cè),到現(xiàn)在已經(jīng)過去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時(shí)候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...

    Harriet666 評(píng)論0 收藏0
  • 23個(gè)Python爬蟲開源項(xiàng)目代碼,包含微信、淘寶、豆瓣、知乎、微博等

    摘要:今天為大家整理了個(gè)爬蟲項(xiàng)目。地址新浪微博爬蟲主要爬取新浪微博用戶的個(gè)人信息微博信息粉絲和關(guān)注。代碼獲取新浪微博進(jìn)行登錄,可通過多賬號(hào)登錄來防止新浪的反扒。涵蓋鏈家爬蟲一文的全部代碼,包括鏈家模擬登錄代碼。支持微博知乎豆瓣。 showImg(https://segmentfault.com/img/remote/1460000018452185?w=1000&h=667); 今天為大家整...

    jlanglang 評(píng)論0 收藏0
  • 零基礎(chǔ)如何學(xué)爬蟲技術(shù)

    摘要:楚江數(shù)據(jù)是專業(yè)的互聯(lián)網(wǎng)數(shù)據(jù)技術(shù)服務(wù),現(xiàn)整理出零基礎(chǔ)如何學(xué)爬蟲技術(shù)以供學(xué)習(xí),。本文來源知乎作者路人甲鏈接楚江數(shù)據(jù)提供網(wǎng)站數(shù)據(jù)采集和爬蟲軟件定制開發(fā)服務(wù),服務(wù)范圍涵蓋社交網(wǎng)絡(luò)電子商務(wù)分類信息學(xué)術(shù)研究等。 楚江數(shù)據(jù)是專業(yè)的互聯(lián)網(wǎng)數(shù)據(jù)技術(shù)服務(wù),現(xiàn)整理出零基礎(chǔ)如何學(xué)爬蟲技術(shù)以供學(xué)習(xí),http://www.chujiangdata.com。 第一:Python爬蟲學(xué)習(xí)系列教程(來源于某博主:htt...

    KunMinX 評(píng)論0 收藏0
  • Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---10、爬蟲框架的安裝:PySpider、Scrapy

    摘要:所以如果對(duì)爬蟲有一定基礎(chǔ),上手框架是一種好的選擇。缺少包,使用安裝即可缺少包,使用安裝即可上一篇文章網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)爬取相關(guān)庫的安裝的安裝下一篇文章網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)爬蟲框架的安裝 上一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---9、APP爬取相關(guān)庫的安裝:Appium的安裝下一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---11、爬蟲框架的安裝:ScrapySplash、ScrapyRedis 我們直接...

    張憲坤 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<