在数据分析的流程中,首先要做的便是获取数据,网络爬虫可以通过程序,自动抓取网络上的目标对象,为数据归集工作提供极大便利。为了实现爬虫程序,我们除了需要了解Python的相关库,也需要了解基本的HTML+CSS+JavaScript网络编程。
那都可以点击下载了,又何必大费周章?设想如果我们需要1年以上的数据,可能会点的手都肿了
我们选择2018-12-14,点击查询,这时刚刚的连接变成了下面的地址:
根据网址的命名规则,可以发现每日的数据的地址就是依据上述网址,将最后面的日期变成目标日期。
现在我们需要分析下载模块的代码。点击Elements模块。我们定位到下面语句:
定位过程十分简单,因为每一个语句都可以在左边的对应界面提示。在这条语句上我们发现了秘密每日的价格就通过以下网址下载:
现在可以建立一个简单的思路:通过读取目标日期的网站源代码,然后抓取上一张图的Excel文件地址,实现数据的下载。
本次爬虫程序,主要调用了以下库:
importrequests
importre
fromurllib.requestimporturlretrieve
fromdatetimeimportdate, timedelta
定义需要下载的起始日期和截止日期
#确定起始日期
startday = date(2018,12,5)
#初始化目标日期
daynow = startday
#确定截止日期
endday = date(2018,12,24)
构架正则表达式
#构架正则表达式
m =r'/uploadfiles/(\d)/(\d)/\d.xls'
建立一个while循环,读取起始日至截止日期间的每日数据。
#循环读取起始日至截止日期间,每日的数据
whiledaynow
#读取网站,网站地址以当前日期结尾
r = requests.get("http://www.shcpe.com.cn/
index_132_lcid_1_date_%s.html"
% daynow.strftime('%Y-%m-%d'))
#当前日期加1天
daynow += timedelta(days=1)
try:
#用正则表达式匹配网址中显示的Excel网站地址
g = re.search(m, r.text)
s ="http://www.shcpe.com.cn"
#url为完整的Excel地址
url = s + g.group()
#为下载的Excel文件命名,以当期日期为名称
filename = daynow.strftime('%Y-%m-%d')
#下载Excel文件
urlretrieve(url,'G:\\BillRate\\%s.xls'% filename)
exceptAttributeErrorase:
#节假日为非交易日,票交所不公布价格
#如果当日为节假日,输出当日无数据
print("%s has no date"% daynow.strftime('%Y-%m-%d'))
对于节假日,输出如下信息:
领取专属 10元无门槛券
私享最新 技术干货