request 爬虫,python爬虫爬取基金
一、请求探索网页分析:
页码分析:
1.第一页:https://gs.amac.org.cn/amac-infodisc/api/pof/fund?rand=0.652806594661254 page=0 size=20
2.第二页:https://gs.amac.org.cn/amac-infodisc/api/pof/fund?rand=0.652806594661254 page=1 size=20
3.https://gs.amac.org.cn/amac-infodisc/api/pof/fund?rand=0.652806594661254 page=2 size=20
单数刷新一下边缘发生变化:似乎就是是一个随机数
https://gs.amac.org.cn/amac-infodisc/api/pof/fund?rand=0.16767992415199218 page=0 size=20
规律变化:页码部分需要调整,兰特部分随机的。
https://gs.amac.org.cn/amac-infodisc/api/pof/fund?rand={} page={} size=20
也可以通过射流研究…查看确定一下就是用的一个随机函数:
写段代码产生随机数:
随机导入
r=random.random()
打印(字符串)完整请求一个页面如下所示:
导入请求
随机导入
导入数据
导入时间
标题={
接受-语言: zh-CN,zh;q=0.9 ,
"内容类型":"应用程序/json”,
Origin: http://gs.amac.org.cn ,
referer : https://GS。amac。org。cn/amac-info disc/RES/POF/fund/index。 html ,
用户代理: Mozilla/5.0(Linux;安卓6.0;nexus 5 Build/MRA 58n)苹果WebKit/537.36(KHTML,像壁虎)铬/101。0 .4951 .54移动Safari/537.36英寸
}
r=random.random()
数量=1
网址=https://gs.amac.org.cn/amac-infodisc/api/pof/fund?rand= str(r) page= str(num) size=20
数据={}
data=json.dumps(data)
response=requests.post(url=url,data=data,headers=headers)
打印(响应)
二、分析详情页面
2.1 基本解析例如分析这一个详情页面:https://GS。amac。org。cn/amac-info disc/RES/POF/fund/351000128956。超文本标记语言
我们使用美味的汤来解析它。
response=requests.get(url2,headers=headers) #请求详情页面
html=requests.get(url=url,headers=headers)。内容。解码( utf-8 )#获取详情页面的全球资源定位器(统一资源定位器)
#打印(html)
soup=BeautifulSoup(html, lxml) #接卸分析具体内容:上面一个表内容都在一个桌子里面
下面一个表信息透露情况:单独又在另外一个桌子里面
2.2 内容定位获取
比如定位基金名称,最简单的做法就是直接复制xpath:
num 1=树。XPath(/html/body/div[3]/div/div[2]/div[1]/div[2]/table/tbody/tr[1]/TD[2]/text(),
encoding=utf-8)[0].替换( \r\n , ).替换( , )。替换( \t , ).编码(
ISO-8859-1’).解码( utf-8) #基金名称
三、完整源码#编码:utf-8
导入请求
随机导入
导入数据
从什么是导入诡异又阴森的树形灯
导入编解码器
导入战斗支援车
计数=0
行数=[]
对于范围(1,15)内的我:
标题={
接受-语言: zh-CN,zh;q=0.9 ,
"内容类型":"应用程序/json”,
Origin: http://gs.amac.org.cn ,
referer : https://GS。amac。org。cn/amac-info disc/RES/POF/fund/index。 html ,
用户代理: Mozilla/5.0(Linux;安卓6.0;nexus 5 Build/MRA 58n)苹果WebKit/537.36(KHTML,像壁虎)铬/101。0 .4951 .54移动Safari/537.36英寸
}
r=random.random()
数量=1
网址=https://gs.amac.org.cn/amac-infodisc/api/pof/fund?rand= str(r) page= str(I) size=20
数据={}
data=json.dumps(data)
response=requests.post(url=url,data=data,headers=headers)
#打印(响应)
datas=JSON。负载(响应。文本)[内容]
:cvar
获取每一个页面的链接
对于数据中的数据1:
jjid=data1[id] #基金身份
管理器URL=data1[管理器URL ]#经理页全球资源定位器(统一资源定位器)
#打印(管理)
fundName=data1[fundName] #基金名称
#打印(基金名称)
经理姓名=数据1[经理姓名]#基金管理人名称
#打印(管理名)
url=data1[url] #获取分支全球资源定位器(统一资源定位器)
#打印(网址)
URL 2= https://GS。amac。org。cn/amac-info disc/RES/POF/fund/ URL #构造完整url,根据每一个链接获取详情页面
#打印(网址2)
计数=1
打印(正在爬取第str(计数) 条数据)
:cvar
开始解析详情页面
html=requests.get(url=url2,headers=headers)。文字。编码( utf-8 )#请求详情页面的全球资源定位器(统一资源定位器)
#打印(html)
tree=etree .HTML(html) #标准化
#编码( ISO-8859-1 ).解码(“utf-8”)解决乱码问题: 转换为正常的中文:
num 1 _ 0=树。XPath(/html/body/div[3]/div/div[2]/div[1]/div[2]/table/tbody/tr[1]/TD[2]/text(),
编码=utf-8 )
如果len(num1_0)==0:
num1=num1_0
否则:
num 1=树。XPath(/html/body/div[3]/div/div[2]/div[1]/div[2]/table/tbody/tr[1]/TD[2]/text(),
encoding=utf-8)[0].替换( \r\n , ).替换( , )。替换( \t , ).编码(
ISO-8859-1’).解码( utf-8) #基金名称
num 2=树。XPath(/html/body/div[3]/div/div[2]/div[1]/div[2]/table/tbody/tr[2]/TD[2]/text(),
encoding=utf-8) #基金编号
#打印(数字2)
num 3 _ 0=树。XPath(/html/body/div[3]/div/div[2]/div[1]/div[2]/table/tbody/tr[3]/TD[2]/text(),
编码=utf-8 )
如果len(num3_0)==0:
num3=num3_0
否则:
数字3=树。XPath(/html/body/div[3]/div/div[2]/div[1]/div[2]/table/tbody/tr[3]/TD[2]/text(),
encoding=utf-8)[0].替换( \r\n , ).替换( , )。替换( \t , )#成立时间
num 4 _ 0=树。XPath(/html/body/div[3]/div/div[2]/div[1]/div[2]/table/tbody/tr[4]/TD[2]/text(),
编码=utf-8 )
如果len(num4_0)==0:
num4=num4_0
否则:
数字4=树。XPath(/html/body/div[3]/div/div[2]/div[1]/div[2]/table/tbody/tr[4]/TD[2]/text(),
encoding=utf-8)[0].替换( , )。替换( \t , )#备案时间
num 5 _ 0=树。XPath(/html/body/div[3]/div/div[2]/div[1]/div[2]/table/tbody/tr[5]/TD[2]/text(),
编码=utf-8 )
如果len(num5_0)==0:
num5=num5_0
否则:
数字5=树。XPath(/html/body/div[3]/div/div[2]/div[1]/div[2]/table/tbody/tr[5]/TD[2]/text(),
encoding=utf-8)[0].编码(
ISO-8859-1’).解码( utf-8) #基金类型
num 6 _ 0=树。XPath(/html/body/div[3]/div/div[2]/div[1]/div[2]/table/tbody/tr[6]/TD[2]/text(),
编码=utf-8 )
如果len(num6_0)==0:
num6=num6_0
否则:
num 6=树。XPath(/html/body/div[3]/div/div[2]/div[1]/div[2]/table/tbody/tr[6]/TD[2]/text(),
encoding=utf-8)[0].替换( \r\n , ).替换( , )。替换( \t , ).编码(
ISO-8859-1’).解码( utf-8) #基金类型
num 7 _ 0=树。XPath(/html/body/div[3]/div/div[2]/div[1]/div[2]/table/tbody/tr[7]/TD[2]/a ,
编码=utf-8 )
# print(num7_0)
# print(len(num7_0))
如果len(num7_0)==0:
num7=num7_0
否则:
num 7=树。XPath(/html/body/div[3]/div/div[2]/div[1]/div[2]/table/tbody/tr[7]/TD[2]/a/text(),
encoding=utf-8)[0].替换( \r\n , ).替换( , )。替换( \t , ).编码(
ISO-8859-1’).解码( utf-8) #币种
#/html/body/div[3]/div/div[2]/div[1]/div[2]/table/tbody/tr[7]/TD[2]/a
num 8 _ 0=树。XPath(/html/body/div[3]/div/div[2]/div[1]/div[2]/table/tbody/tr[7]/TD[2]/a/text(),
编码=utf-8 )
如果len(num8_0)==0:
num8=num8_0
否则:
数字8=树。XPath(/html/body/div[3]/div/div[2]/div[1]/div[2]/table/tbody/tr[8]/TD[2]/text(),
encoding=utf-8)[0].替换( \r\n , ).替换( , )。替换( \t , ).编码(
ISO-8859-1’).解码( utf-8) #基金管理人名称
num 9 _ 0=树。XPath(/html/body/div[3]/div/div[2]/div[1]/div[2]/table/tbody/tr[9]/TD[2]/text(),
编码=utf-8 )
如果len(num9_0)==0:
num9=num9_0
否则:
num 9=树。XPath(/html/body/div[3]/div/div[2]/div[1]/div[2]/table/tbody/tr[9]/TD[2]/text(),
encoding=utf-8)[0].替换( \r\n , ).替换( , )。替换( \t , ).编码(
ISO-8859-1’).解码( utf-8) #管理类型
num 10 _ 0=树。XPath(/html/body/div[3]/div/div[2]/div[1]/div[2]/table/tbody/tr[10]/TD[2]/text(),
encoding=utf-8) #托管人名称
如果len(num10_0)==0:
数字10=树。XPath(/html/body/div[3]/div/div[2]/div[1]/div[2]/table/tbody/tr[10]/TD[2]/text(),
encoding=utf-8) #托管人名称
否则:
数字10=树。XPath(/html/body/div[3]/div/div[2]/div[1]/div[2]/table/tbody/tr[10]/TD[2]/text(),
encoding=utf-8)[0].替换( \r\n , ).替换( , )。替换( \t , ).编码(
ISO-8859-1’).解码( utf-8) #托管人名称
num 11 _ 0=树。XPath(/html/body/div[3]/div/div[2]/div[1]/div[2]/table/tbody/tr[11]/TD[2]/text(),
编码=utf-8 )
如果len(num11_0)==0:
num11=num11_0
否则:
编号11=树。XPath(/html/body/div[3]/div/div[2]/div[1]/div[2]/table/tbody/tr[11]/TD[2]/text(),
encoding=utf-8)[0].替换( \r\n , ).替换( , )。替换( \t , ).编码(
ISO-8859-1’).解码( utf-8) #运作状态
num 12=树。XPath(/html/body/div[3]/div/div[2]/div[1]/div[2]/table/tbody/tr[12]/TD[2]/text(),
encoding=utf-8) #基金信息最后更新时间
num 13 _ 0=树。XPath(/html/body/div[3]/div/div[2]/div[1]/div[2]/table/tbody/tr[13]/TD[2]/text(),
encoding=utf-8) #基金业协会特别提示
如果len(num13_0)==0:
num13=num13_0
否则:
编号13=树。XPath(/html/body/div[3]/div/div[2]/div[1]/div[2]/table/tbody/tr[13]/TD[2]/text(),
encoding=utf-8)[0].替换( \r\n , ).替换( , )。替换( \t , ).编码(
ISO-8859-1’).解码(“utf-8”)
仙=树。XPath(/html/body/div[3]/div/div[2]/div[2]/table/tbody/tr[1]/TD[2]/text(),
encoding=utf-8)[0].替换( \r\n , ).替换( , )。替换( \t , ).编码(
ISO-8859-1’).解码( utf-8) #当月月报
#打印(西安)
仙2=树。XPath(/html/body/div[3]/div/div[2]/div[2]/table/tbody/tr[2]/TD[2]/text(),
encoding=utf-8)[0].替换( \r\n , ).替换( , )。替换( \t , ).编码(
ISO-8859-1’).解码( utf-8) #季报
仙3=树。XPath(/html/body/div[3]/div/div[2]/div[2]/table/tbody/tr[3]/TD[3]/text(),
encoding=utf-8) #半年报
仙4=树。XPath(/html/body/div[3]/div/div[2]/div[2]/table/tbody/tr[4]/TD[2]/text(),
encoding=utf-8)[0].替换( \r\n , ).替换( , )。替换( \t , ).编码(
ISO-8859-1’).解码( utf-8) #年报
仙5=树。XPath(/html/body/div[3]/div/div[2]/div[2]/table/tbody/tr[5]/TD[2]/text(),
encoding=utf-8)[0].替换( \r\n , ).替换( , )。替换( \t , ).编码(
ISO-8859-1’).解码( utf-8) #账号开立率
#打印(先5)
row=(
num1,num2,num3,num4,num5,num6,num7,num8,num9,num10,num11,num12,num13,先,先2,先3,先4,
先5)
rows.append(row)
#时间。睡眠(1) #设置休眠
使用编解码器。打开(基金. csv , wb ,编码=gbk ,错误=ignore )作为女:
writer=csv.writer(f)
writer.writerow(
[基金名称, 基金编号, 成立时间, 备案时间, X1 , X2 , X3 , X4 , X5 , x6 , X7 , X8 , X9
, 当月月报, 季报, 半年报, 年报, 账号开立率])
writer.writerows(行)效果如下:
四、总结设计有些欠妥,代码也有些冗余,但是已经写了一下午了,感兴趣的自行优化。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。