摘要:技術路線爬蟲框架語言由于在上一篇博客中已經介紹了股票信息爬取的原理,在這里不再進行過多介紹,如需了解可以參考博客鏈接描述,在本篇文章中主要講解該項目在框架中如何實現。
簡介
目標: 獲取上交所和深交所所有股票的名稱和交易信息。
輸出: 保存到文件中。
技術路線:Scrapy爬蟲框架
語言: python3.5
由于在上一篇博客中已經介紹了股票信息爬取的原理,在這里不再進行過多介紹,如需了解可以參考博客:鏈接描述,在本篇文章中主要講解該項目在Scrapy框架中如何實現。
Scrapy框架如下圖所示:
我們主要進行兩步操作:
(1) 首先需要在框架中編寫一個爬蟲程序spider,用于鏈接爬取和頁面解析;
(2) 編寫pipelines,用于處理解析后的股票數據并將這些數據存儲到文件中。
步驟:
(1) 建立一個工程生成Spider模板
打開cmd命令行,定位到項目所放的路徑,輸入:scrapy startproject BaiduStocks,此時會在目錄中新建一個名字為BaiduStocks的工程。再輸入:cd BaiduStocks進入目錄,接著輸入:scrapy genspider stocks baidu.com生成一個爬蟲。之后我們可以在spiders/目錄下看到一個stocks.py文件,如下圖所示:
(2) 編寫Spider:配置stocks.py文件,修改返回頁面的處理,修改對新增URL爬取請求的處理
打開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文件,定義爬取項(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
對上述代碼修改如下:
# -*- 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 #每個pipelines類中有三個方法 class BaidustocksInfoPipeline(object): #當一個爬蟲被調用時,對應的pipelines啟動的方法 def open_spider(self, spider): self.f = open("BaiduStockInfo.txt", "w") #一個爬蟲關閉或結束時的pipelines對應的方法 def close_spider(self, spider): self.f.close() #對每一個Item項進行處理時所對應的方法,也是pipelines中最主體的函數 def process_item(self, item, spider): try: line = str(dict(item)) + " " self.f.write(line) except: pass return item
(4) 修改settings.py,是框架找到我們在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) 執行程序
在命令行中輸入:scrapy crawl stocks
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/25596.html
摘要:時間永遠都過得那么快,一晃從年注冊,到現在已經過去了年那些被我藏在收藏夾吃灰的文章,已經太多了,是時候把他們整理一下了。那是因為收藏夾太亂,橡皮擦給設置私密了,不收拾不好看呀。 ...
摘要:今天為大家整理了個爬蟲項目。地址新浪微博爬蟲主要爬取新浪微博用戶的個人信息微博信息粉絲和關注。代碼獲取新浪微博進行登錄,可通過多賬號登錄來防止新浪的反扒。涵蓋鏈家爬蟲一文的全部代碼,包括鏈家模擬登錄代碼。支持微博知乎豆瓣。 showImg(https://segmentfault.com/img/remote/1460000018452185?w=1000&h=667); 今天為大家整...
摘要:楚江數據是專業的互聯網數據技術服務,現整理出零基礎如何學爬蟲技術以供學習,。本文來源知乎作者路人甲鏈接楚江數據提供網站數據采集和爬蟲軟件定制開發服務,服務范圍涵蓋社交網絡電子商務分類信息學術研究等。 楚江數據是專業的互聯網數據技術服務,現整理出零基礎如何學爬蟲技術以供學習,http://www.chujiangdata.com。 第一:Python爬蟲學習系列教程(來源于某博主:htt...
摘要:所以如果對爬蟲有一定基礎,上手框架是一種好的選擇。缺少包,使用安裝即可缺少包,使用安裝即可上一篇文章網絡爬蟲實戰爬取相關庫的安裝的安裝下一篇文章網絡爬蟲實戰爬蟲框架的安裝 上一篇文章:Python3網絡爬蟲實戰---9、APP爬取相關庫的安裝:Appium的安裝下一篇文章:Python3網絡爬蟲實戰---11、爬蟲框架的安裝:ScrapySplash、ScrapyRedis 我們直接...
閱讀 904·2021-09-29 09:35
閱讀 1253·2021-09-28 09:36
閱讀 1522·2021-09-24 10:38
閱讀 1066·2021-09-10 11:18
閱讀 631·2019-08-30 15:54
閱讀 2496·2019-08-30 13:22
閱讀 1964·2019-08-30 11:14
閱讀 697·2019-08-29 12:35