爬取所有上市公司的信息并写入Excel(较为详细)
女友金融高材生的,经常需要各种乱七八糟公司的具体内容,那身为不懂金融男友的我能做些什么呢,当然是吃瓜(要被打死…),当然是满足女朋友的需求,所以就拿起来了python保护自己(爱女朋友),首先先找找合适爬的网站,经过千辛万苦终于找到了一个合适的网站,在这个数据库可以看到所有上市公司的内容,截图如下,话不多说开始干活 ? (先提示一下,网上有类似的用panda爬到的表格,但内容有很多格式错误)
F12检查一下,发现网页为GET类型,感兴趣的小伙伴可以直接去get到网页所有信息,这个公司内容这块使用了<tbody></tbody>
,使用正常的get得不到里面的内容,但看源码是可以看到的。
然后怎么办呢,先翻页看看吧,发现了一个很重要的东西
发现url并没有变化,这种URL没有变化的很大可能使用了ajax(异步 JavaScript 和 XML)所以我们查看XHR,如下所示,
我们得到了一串神秘链接:http://s.askci.com/StockInfo/StockList/GetList
注意网页为POST类型,然后怎么办,当然是点进去,(手动滑稽)然后,我发现了宝藏
发现只有三十个数据,那在哪控制翻页呢,往回看
我们拉到最底下可以看到这样一排小字:
pageNum: 1
为了显示他的小我故意放大了看 ???
注意json转为字典格式需要用到
json.loads()
json属于JavaScript,不懂的可以上网看看,也可以直接导入json库,用我上面的方法解析json数据。
那我想信看到这的小伙伴应该都有自己的思路了吧,我就直接上代码了
import requests
import json
import xlwt
import time
import random
import socket
socket.setdefaulttimeout(20)
book = xlwt.Workbook()
sheet = book.add_sheet('sheetname')
name=['序号','股票代码','股票名称','公司全称','注册地址','省府','城市名(区名)','主营业务收入','总业务收入','净利润','员工数量','上市日期','明星公司上市日期','建立日期','股票转让书','财务报告','行业分类','产品类别','主营业务','产品名称','电话','办公室地址','董事长','法人','公司行业ID','公司城市ID','省份']
for i in range(len(name)): #自定义表头
sheet.write(0,i,name[i])
url='http://s.askci.com/StockInfo/StockList/GetList' #上市公司具体信息 得到json数据
for i in range(1,557):
time.sleep(1+random.random())
formdata ={'type':'index' ,
'pageNum': i}
r = requests.post(url,data=formdata) #ajax 通过构建data解决翻页问题
r.encoding='utf-8'
data=json.loads(r.text).get('data') #转换为字典数据 可自己选择保留的数据
for k in range(30):
b=list(data[k].values())
for j in range(len(b)):
sheet.write(b[0],j,b[j])
book.save('D:/1.xls') #自定义位置
print('已完成'+str(b[0])+'个')
r.close() #每一次都关闭requests请求 防止网页误判攻击行为
这是爬到的内容,有几列是没有用的,可以在程序上适当修改或者事后再手动删掉,女朋友终于不用在一个一个搜了,真开心!