Python爬蟲(十)——股票定向爬蟲
文章目錄
Python爬蟲(十)——股票定向爬蟲
- 目標:獲取上交所和深交所的所有股票的名稱和交易信息
- 輸出:保存到文件中
- 技術路線:requests-bs4-re
候選網站
新浪股票:http://finance.sina.com.cn/stock/
百度股票:http://gupiao.baidu.com/stock/
選擇
- 選取原則:股票信息靜態存在于HTML頁面中,非js代碼生成,沒有Robots協議限制。
- 選取方法:通過開發者模式或查看源代碼。
- 選取心態:多找幾個網站嘗試。
因此我們觀察新浪的網頁代碼,發現股票的信息都是引用的js代碼,然后百度股票已經關閉了網頁版。所以我們在查閱了其他各種股票網站以后選擇了中財網這個網站(http://quote.cfi.cn/)。
程序的結構設計
步驟
- 從東方財富網獲取股票列表
- 根據股票列表逐個到中財網獲取個股信息
- 將結果存儲到文件
方法
getHTMLText(url, code=‘utf-8’)
在這里我們預設encoding為’utf-8’從而節省判斷編碼的時間。
代碼:
def getHTMLText(url, code='utf-8'):
try:
r = requests.get(url, timeout=30)
r.raise_for_status()
r.encoding = code # 判斷編碼時間會消耗很多時間,所以我們提前去網站上了解編碼類型
return r.text
except:
return ""
getStockList(lst, stockUrl)
我們先得到股票列表。通過觀察網頁源代碼,我們發現上證和深證的股票編碼可以用以下的正則表達式表示:
r'[s][hz]\d{6}'
然后我們查詢網站的編碼類型:
代碼:
def getStockList(lst, stockUrl):
html = getHTMLText(stockUrl, 'GB2312') # 填上在網頁代碼中看到的編碼方式
soup = BeautifulSoup(html, 'html.parser')
a = soup.find_all('a')
for i in a:
try:
href = i.attrs['href']
lst.append(re.findall(r'[s][hz]\d{6}', href)[0][2:])
except:
continue
getStockInfo(lst, stockUrl)
最后我們對股票列表中的股票進行查詢后提取股票的信息。這時我們需要在網頁代碼中找到我們需要的信息。我們發現整個股票的信息都在一個table中:
進一步觀察發現股票名字在一個class='Lfont’的標簽中:
而其他的信息都在一個class='Rlist’的標簽中:
在充分了解相關信息的name和attrs后,我們利用BeautifulSoup提取出相關信息再將其存入excel表格中。
代碼:
def getStockInfo(lst, stockUrl):
count = 0
wb = xlwt.Workbook(encoding='utf-8')
ws = wb.add_sheet('股票')
ws.write(0, 0, label='股票名稱')
ws.write(0, 1, label='信息')
for stock in lst:
url = stockUrl+stock+'.html' # 得到每個股票代碼的網頁
html = getHTMLText(url)
try:
if html == "":
continue
infoDict = {}
soup = BeautifulSoup(html, 'html.parser')
stockInfo = soup.find('table', attrs={
'style': 'width:550px;border:0;padding:0;border-collapse:collapse;'})
if stockInfo:
name = stockInfo.find('div', attrs={'class': 'Lfont'})
infoDict.update({'股票名稱': name.text})
table = stockInfo.find('td', attrs={'class': 'Rlist'})
keyList = table.find_all('td')
key = ''
for td in keyList:
key = key+(td.text+'\n')
infoDict['信息'] = key
count += 1
ws.write(count, 0, label=infoDict['股票名稱'])
ws.write(count, 1, label=infoDict['信息'])
print('\r當前進度:{:.2f}&'.format(count*100/len(lst)),
end='') # /r能夠將打印的光標提到行首
except:
print('\r當前進度:{:.2f}&'.format(count*100/len(lst)), end='')
traceback.print_exc()
continue
wb.save('股票.xls')
完整代碼
import requests
from bs4 import BeautifulSoup
import traceback
import re
import xlwt
def getHTMLText(url, code='utf-8'):
try:
r = requests.get(url, timeout=30)
r.raise_for_status()
r.encoding = code # 判斷編碼時間會消耗很多時間,所以我們提前去網站上了解編碼類型
return r.text
except:
return ""
def getStockList(lst, stockUrl):
html = getHTMLText(stockUrl, 'GB2312') # 填上在網頁代碼中看到的編碼方式
soup = BeautifulSoup(html, 'html.parser')
a = soup.find_all('a')
for i in a:
try:
href = i.attrs['href']
lst.append(re.findall(r'[s][hz]\d{6}', href)[0][2:])
except:
continue
def getStockInfo(lst, stockUrl):
count = 0
wb = xlwt.Workbook(encoding='utf-8') # 新建一個workbook
ws = wb.add_sheet('股票') # 新建一個worksheet
ws.write(0, 0, label='股票名稱')
ws.write(0, 1, label='信息')
for stock in lst:
url = stockUrl+stock+'.html' # 得到每個股票代碼的網頁
html = getHTMLText(url)
try:
if html == "":
continue
infoDict = {}
soup = BeautifulSoup(html, 'html.parser')
stockInfo = soup.find('table', attrs={
'style': 'width:550px;border:0;padding:0;border-collapse:collapse;'})
if stockInfo:
name = stockInfo.find('div', attrs={'class': 'Lfont'})
infoDict.update({'股票名稱': name.text})
table = stockInfo.find('td', attrs={'class': 'Rlist'})
keyList = table.find_all('td')
key = ''
for td in keyList:
key = key+(td.text+'\n')
infoDict['信息'] = key
count += 1
ws.write(count, 0, label=infoDict['股票名稱']) # 寫入信息
ws.write(count, 1, label=infoDict['信息']) # 寫入信息
print('\r當前進度:{:.2f}&'.format(count*100/len(lst)),
end='') # /r能夠將打印的光標提到行首
except:
print('\r當前進度:{:.2f}&'.format(count*100/len(lst)), end='')
traceback.print_exc()
continue
wb.save('股票.xls') # 保存為股票.xls
stockListUrl = 'http://quote.eastmoney.com/stock_list.html'
stockInfoUrl = 'http://quote.cfi.cn/quote_'
slist = []
getStockList(slist, stockListUrl)
getStockInfo(slist, stockInfoUrl, fpath)
結果:
智能推薦
Python爬蟲入門實例八之股票數據定向爬取并保存(優化版)
文章目錄 寫在前面 一、準備工作 1.功能描述 2.候選數據網站的選擇 3.程序的結構設計 4.本篇選取的數據網站 (1)網站鏈接 (2)網站內容 二、數據網站分析 1.股票列表的分析 2.個股信息的分析 三、編程過程 1.使用到的庫 2.獲取頁面(編寫getHTMLText()函數) 3.獲取股票的信息列表(編寫getStockList()函數) 4.獲取個股信息(編寫getStockInfo(...
python——爬取網頁定向爬蟲(6)
定向爬蟲 定義:定向爬蟲可以精準的獲取目標站點信息。僅對輸入URL進行爬取,不拓展爬取。 【實例練習】 【中國的大學排名爬取】 1 查看網頁是否對爬蟲有限制 1.查看 robots.txt 無robots.txt文件說明無爬蟲限制 2.查看原網頁 要提取的信息被封裝在html內 2.程序的結構設計 步驟1:從網絡上獲取大學排名網頁內容 步驟2:提取網頁內容中信息到合適的數據結構(二維數據) 步驟3...
python--定向爬蟲基本操作
一、認識爬蟲 瀏覽器的工作原理: 爬蟲的工作原理: 爬蟲工作4個步驟: 第0步:獲取數據。爬蟲程序會根據我們提供的網址,向服務器發起請求,然后返回數據。 第1步:解析數據。爬蟲程序會把服務器返回的數據解析成我們能讀懂的格式。 第2步:提取數據。爬蟲程序再從中提取出我們需要的數據。 第3步:儲存數據。爬蟲程序把這些有用的數據保存起來,便于你日后的使用和分析。 二、獲取數據:模塊requ...
Python淘寶商品比價定向爬蟲
1.項目基本信息 目標: 獲取淘寶搜索頁面的信息,提取其中的商品名稱和價格 理解: 淘寶的搜索接口、翻頁的處理 URL樣式: 2.程序的結構設計 步驟1:提交商品搜索請求,循環獲取頁面 步驟2:對于每個頁面,提取商品名稱和價格信息 步驟3:將信息輸出到屏幕上 3.Cookie內容的獲取 由于淘寶的反爬機制,需要修改請求頭,添加Cookie信息 運行結果: 4.代碼 最近在重溫之前看過的北理的嵩天老...
猜你喜歡
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...
Linux C系統編程-線程互斥鎖(四)
互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...