文章导语
今年暑假系里给每个同学布置了一篇学年论文,就想着怎么也得弄点数据撑撑排面吧,一开始我是不想爬的,然后就在网上各种找接口,找了半天,不是不能用就是获取的数据只是实时的,无法获得历史数据,哎,既然没办法,就只能爬了,顺便就在一个群里问了一下端口的事,然后开始准备工作,等网页分析完了,开始敲代码的时候,又看了一下手机,有个道友说tushare里面有接口,虽然tushare用了也挺多次吧,但是没发现有汇率的接口啊,我又抱着希望去看了看,果不其然,还真有。但是回头一想,网页都分析完了,干脆写完得了。二话不说,写吧!
实现过程
#! /usr/bin/env/ python
# -*- coding:UTF-8 -*-
# Author: Zhu Huaren
import requests
from lxml import etree
import time
import xlrd
from xlutils.copy import copy
proxy = {
'HTTP': 'HTTP://180.125.70.78:9999',
'HTTP': 'HTTP://117.90.4.230:9999',
'HTTP': 'HTTP://111.77.196.229:9999',
'HTTP': 'HTTP://111.177.183.57:9999',
'HTTP': 'HTTP://123.55.98.146:9999',
}
row = 0
for n in range(1,50): # 抓取页码范围
form_data = {
'erectDate': '2009-07-01',
'nothing': '2019-07-08',
'pjname': '1316', # 美元兑人民币代码,修改此代码可获得其他货币兑人民币汇率
'page': n,
}
url = 'http://srh.bankofchina.com/search/whpj/search.jsp'
res = requests.post(url=url, data=form_data,proxies=proxy)
html = etree.HTML(res.text)
for j in range(2, 22):
m_n = html.xpath('//tr[{}]/td[1]/text()'.format(j))
s_e_p = html.xpath('//tr[{}]/td[2]/text()'.format(j))
c_p = html.xpath('//tr[{}]/td[3]/text()'.format(j))
s_e_sp = html.xpath('//tr[{}]/td[4]/text()'.format(j))
c_s = html.xpath('//tr[{}]/td[5]/text()'.format(j))
bank_count_p = html.xpath('//tr[{}]/td[6]/text()'.format(j))
date = html.xpath('//tr[{}]/td[7]/text()'.format(j))
row = row + 1
workbook = xlrd.open_workbook('money.xls') # 创建工作表
workbook_copy = copy(workbook) # 向工作表内追加内容
worksheet = workbook_copy.get_sheet(0)
worksheet.write(0, 0, '货币名称')
worksheet.write(0, 1, '现汇买入价')
worksheet.write(0, 2, '现钞买入价')
worksheet.write(0, 3, '现汇卖出价')
worksheet.write(0, 4, '现钞卖出价')
worksheet.write(0, 5, '中行折算价')
worksheet.write(0, 6, '发布时间')
worksheet.write(row, 0, ''.join(m_n)) # 将列表格式转换为字符串
worksheet.write(row, 1, ''.join(s_e_p))
worksheet.write(row, 2, ''.join(c_p))
worksheet.write(row, 3, ''.join(s_e_sp))
worksheet.write(row, 4, ''.join(c_s))
worksheet.write(row, 5, ''.join(bank_count_p))
worksheet.write(row, 6, ''.join(date))
workbook_copy.save('money.xls')
print('第{}页爬取完成...'.format(n))
time.sleep(1)
获取数据的界面
获取的数据,我就先爬了1000多条,等用的时候再爬吧。
文章结语
最后我再说说我踩的坑吧,第一个就是在网页开发工具上复制的xpath路径竟然不能直接用,比如说这个把,复制xpath路径的时候,它会自动优化,把一些网页源码没有的节点自动补齐,当你用这个路径提取内容的时候肯定提取不出来。还有一个就是追加写入Excel,这个就不多说了吧。
总结下来一句话:
只有当你踩的坑多了,你才有机会踩下一个坑,否则你连下一个坑都见不到。