摘要:技術(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
摘要:時(shí)間永遠(yuǎn)都過得那么快,一晃從年注冊(cè),到現(xiàn)在已經(jīng)過去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時(shí)候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...
摘要:今天為大家整理了個(gè)爬蟲項(xiàng)目。地址新浪微博爬蟲主要爬取新浪微博用戶的個(gè)人信息微博信息粉絲和關(guān)注。代碼獲取新浪微博進(jìn)行登錄,可通過多賬號(hào)登錄來防止新浪的反扒。涵蓋鏈家爬蟲一文的全部代碼,包括鏈家模擬登錄代碼。支持微博知乎豆瓣。 showImg(https://segmentfault.com/img/remote/1460000018452185?w=1000&h=667); 今天為大家整...
摘要:楚江數(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...
摘要:所以如果對(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 我們直接...
閱讀 951·2021-09-29 09:35
閱讀 1282·2021-09-28 09:36
閱讀 1577·2021-09-24 10:38
閱讀 1115·2021-09-10 11:18
閱讀 665·2019-08-30 15:54
閱讀 2527·2019-08-30 13:22
閱讀 1993·2019-08-30 11:14
閱讀 729·2019-08-29 12:35