今天將使用python抓取一個(gè)股票市場(chǎng)數(shù)據(jù)的重要來源。我們將為此編寫一個(gè)刮板。使用該刮板,您將可以從一個(gè)平臺(tái)上刮刮任何公司的股票數(shù)據(jù)。如您所知,想使事情變得簡(jiǎn)單,為此還將使用網(wǎng)絡(luò)刮板,這將提高您的刮板效率。為什么使用這個(gè)工具?該工具將幫助我們使用數(shù)百萬個(gè)旋轉(zhuǎn)代理來抓取動(dòng)態(tài)網(wǎng)站,以免被阻止。它還提供了驗(yàn)證碼清除功能。它使用無標(biāo)題的chrome抓取動(dòng)態(tài)網(wǎng)站。
要求
通常,網(wǎng)頁抓取分為兩個(gè)部分:
通過發(fā)出HTTP請(qǐng)求獲取數(shù)據(jù)通過解析HTMLDOM提取重要數(shù)據(jù)
庫和工具
BeautifulSoup是一個(gè)Python庫,用于從HTML和XML文件中提取數(shù)據(jù)。通過請(qǐng)求,?您可以非常輕松地發(fā)送HTTP請(qǐng)求。網(wǎng)絡(luò)抓取工具以提取目標(biāo)網(wǎng)址的HTML代碼。
建立
我們的設(shè)置非常簡(jiǎn)單。只需創(chuàng)建一個(gè)文件夾并安裝BeautifulSoup和請(qǐng)求即可。要?jiǎng)?chuàng)建文件夾并安裝庫,請(qǐng)?jiān)诮o定命令下方鍵入。我假設(shè)您已經(jīng)安裝了Python3.x。
mkdirscraper
pipinstallbeautifulsoup4
pipinstallrequests
現(xiàn)在,使用您喜歡的任何名稱在該文件夾中創(chuàng)建一個(gè)文件。我正在使用scraping.py。
首先,您必須注冊(cè)scrapingdogAPI。它將為您提供1000個(gè)免費(fèi)積分。然后,只需在文件中導(dǎo)入BeautifulSoup和請(qǐng)求即可。像這樣。
frombs4importBeautifulSoupimportrequests
我們要抓的東西
這是我們將提取的字段列表:
1.上一個(gè)收盤價(jià)
2.打開
3.競(jìng)標(biāo)
4.問
5.天的范圍
6.52周范圍
7.音量
8.平均卷
9.市值
10.Beta
11.市盈率
12.每股收益
13.收益率
14.預(yù)期股息和收益率
15.除息日
16.1y目標(biāo)EST
準(zhǔn)備階段
現(xiàn)在,由于我們具備了準(zhǔn)備刮板的所有要素,因此我們應(yīng)該對(duì)目標(biāo)URL進(jìn)行GET請(qǐng)求以獲取原始HTML數(shù)據(jù)。如果您不熟悉抓取工具,請(qǐng)敦促您仔細(xì)閱讀其文檔。現(xiàn)在,我們將使用請(qǐng)求庫抓取YahooFinance的財(cái)務(wù)數(shù)據(jù),如下所示。
r=requests.get.text
這將為您提供該目標(biāo)URL的HTML代碼。
現(xiàn)在,您必須使用BeautifulSoup解析HTML。
soup=BeautifulSoup(r,’html.parser’)
現(xiàn)在,在整個(gè)頁面上,我們有四個(gè)“tbody”標(biāo)簽。我們對(duì)前兩個(gè)感興趣,因?yàn)槲覀兡壳安恍枰谌偷谒膫€(gè)“tbody”標(biāo)簽中的可用數(shù)據(jù)。
首先,我們將使用變量“湯”找出所有這些“身體”標(biāo)簽。
alldata=soup.find_all(“tbody”)
如您所見,前兩個(gè)“tbody”具有8個(gè)“tr”標(biāo)簽,每個(gè)“tr”標(biāo)簽具有兩個(gè)“td”標(biāo)簽。
try:
table1=alldata[0].find_all(“tr”)except:
table1=Nonetry:
table2=alldata[1].find_all(“tr”)except:
table2=None
現(xiàn)在,每個(gè)“tr”標(biāo)簽都有兩個(gè)“td”標(biāo)簽。第一個(gè)td標(biāo)記由屬性的名稱組成,另一個(gè)具有該屬性的值。這有點(diǎn)像鍵值對(duì)。
此時(shí),我們將在開始for循環(huán)之前聲明一個(gè)列表和一個(gè)字典。
l={}
u=list()
為了簡(jiǎn)化代碼,我將為每個(gè)表運(yùn)行兩個(gè)不同的“for”循環(huán)。首先是“table1”
foriinrange(0,len(table1)):
try:
table1_td=table1[i].find_all(“td”)
except:
table1_td=None
l[table1_td[0].text]=table1_td[1].text
u.append(l)
l={}
現(xiàn)在,我們要做的是將所有td標(biāo)簽存儲(chǔ)在變量“table1_td”中。然后,我們將第一個(gè)和第二個(gè)td標(biāo)簽的值存儲(chǔ)在“字典”中。然后,我們將字典推入列表。由于我們不想存儲(chǔ)重復(fù)的數(shù)據(jù),因此我們將在最后將字典設(shè)為空。對(duì)于“table2”,將遵循類似的步驟。
foriinrange(0,len(table2)):
try:
table2_td=table2[i].find_all(“td”)
except:
table2_td=None
l[table2_td[0].text]=table2_td[1].text
u.append(l)
l={}
然后,當(dāng)您打印列表“u”時(shí),您將得到一個(gè)JSON響應(yīng)。
{
“Yahoofinance”:[
{
“PreviousClose”:“2,317.80”
},
{
“Open”:“2,340.00”
},
{
“Bid”:“0.00x1800”
},
{
“Ask”:“2,369.96x1100”
},
{
“Day’sRange”:“2,320.00–2,357.38”
},
{
“52WeekRange”:“1,626.03–2,475.00”
},
{
“Volume”:“3,018,351”
},
{
“Avg.Volume”:“6,180,864”
},
{
“MarketCap”:“1.173T”
},
{
“Beta(5YMonthly)”:“1.35”
},
{
“PERatio(TTM)”:“112.31”
},
{
“EPS(TTM)”:“20.94”
},
{
“EarningsDate”:“Jul23,2020—Jul27,2020”
},
{
“ForwardDividend&Yield”:“N/A(N/A)”
},
{
“Ex-DividendDate”:“N/A”
},
{
“1yTargetEst”:“2,645.67”
}
]
}
沒那么神奇。我們僅在5分鐘的設(shè)置過程中就刮掉了Yahoo財(cái)務(wù)。我們有一個(gè)python對(duì)象數(shù)組,其中包含某公司的財(cái)務(wù)數(shù)據(jù)。這樣,我們可以從任何網(wǎng)站上抓取數(shù)據(jù)。
以上即是關(guān)于如何使用python進(jìn)行網(wǎng)頁爬取的全部?jī)?nèi)容介紹,想了解更多關(guān)于python的信息,請(qǐng)繼續(xù)關(guān)注中培偉業(yè)。