主要有三个步骤:(1)从东方财富上爬虫读取到所有股票的codelist;(2)从凤凰网的api获取到某只股票历史上所有数据,开盘收盘价,成交量,成交金额,ma均线价格等数据;(3)通过pymysql将获取到的数据存储到本地。
第一个步骤的实现,从EAST_MONEY_URL = '/stocklist.html'处获取stocklist。主要使用
#encoding = uft-8
import requests
from bs4 import BeautifulSoup
import re
class GetStockList(object):
def get_html_text(self, url):
try:
response = requests.get(url)
response.raise_for_status()
response.encoding = 'utf-8'
return response.text#html变量存储读取的网页text
except:
return ''
def get_stock_list(self, url):
html = self.get_html_text(url)
soup = BeautifulSoup(html, 'html.parser')
a = soup.find_all('a')
stock_list = []
for i in a:
try:
href = i.attrs['href']
stock_num = str(re.findall(r"[s][hz]\d{6}",href)[0])
if stock_num:
stock_list.append(stock_num)
except:
continue
return stock_listfind_all()的查找方式可以有多种,第一种按标签方式查找,上面的ul, div, li均是标签;第二种按内容查找,参数为text='xxx';第三种按正则表达式查找。可以跟limit参数限定返回的list的长度,当limit=1时候也就是find()函数了。
查找结果的list每个元素是bs4.element.ResultSet类型,可以继续接find函数,也可以调用attrs属性返回一个dict。
soup.find_all('a')会返回所有标签为a的元素
In [44]: soup.find_all('a', limit=5)
Out[44]:
[�ƾ�,
Ҫ��,
��Ʊ,
�¹�,
��ָ]
In [45]: soup.find_all('a', limit=5)[0].attrs
Out[45]: {'href': '/', 'target': '_blank'}
In [46]: soup.find_all('a', limit=5)[0].attrs['href']
Out[46]: '/'