xccxvb 发表于 2018-7-10 17:17

【python】爬取天天基金网数据

本帖最后由 xccxvb 于 2018-7-10 20:33 编辑

第一次在吾爱发帖,有些不会的请多多包含:lol
在最前面先来展示下爬取到的数据::lol
代码是这样的
额……
我好像没写注释
算了,简略加上注释吧


import requests
import json
from time import time
from lxml import etree
import re
from random import sample
from time import sleep

np = 1
base = "http://fund.eastmoney.com/"
acount = 2
# 爬取排行页
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.4620.400 QQBrowser/9.7.13014.400'
}
url = "http://fund.eastmoney.com/data/rankhandler.aspx?op=ph&dt=kf&ft=all&rs=&gs=0&sc=zzf&st=desc&sd=2017-07-09&ed=2018-07-09&qdii=&tabSubtype=,,,,,&pi=1&pn=50&dx=1&v=0."
def IndexSpider(url, headers): #爬取第一个页面信息
    url = url+str(int(time())) #这个主要是url最后一个值是v=数字,我就用时间戳来伪装了
    rsp = requests.get(url, headers=headers).content
    html = rsp.decode('utf-8')
    url = url[:-10] #请求完了之后减掉加的时间戳,方面爬取下一页的时候重复操作
    return html
def ChangeUrl(url): #改变url,pi代表的是页数,这样可以按顺序爬取相应页数的数据
    global acount
    url = url.replace("&pi=1", "&pi="+str(acount))
    acount = acount+1
    return url
def ChangeUrl_2(jijindaima): #我要爬取相应基金点开之后的页面的数据,分析可知是对应基金代码前面加上域名,后面加上.html
    global base
    jijindaima = jijindaima.replace('\"', '')
    url_2 = base+jijindaima+'.html'
    return url_2
def DetailRequest(url): #爬取点开那一页之后的数据
    global np
    url = url.replace('\"', '')
    print(url)
    print("正在爬取第{0}条记录".format(np))
    np = np+1
    re_leixing = re.compile('基金类型(.*?)</a>')
    re_jingli = re.compile('基金经理:<a href=(.*?)</a>')
    re_chengliri = re.compile('<td><span class="letterSpace01">成 立 日</span>:(.*?)</td>')
    rsp = requests.get(url, headers=headers).content
    html = rsp.decode('utf-8')
    leixing = re_leixing.findall(html)[-3:]
    jingli = re_jingli.findall(html)[-2:]
    chengliri = re_chengliri.findall(html)
    return jingli, leixing, chengliri


if __name__ == '__main__':
    nw = 1
    url2_detail = []
    jijindaima_list = []
    detail_url_list = []
    with open('w.txt', 'a', encoding='utf-8') as f:
      f.write("基金代码\t\t基金简称\t\t单位净值\t\t累计净值\t\t基金经理\t\t基金类型\t\t成立日\n")
    for i in range(1, 32):
      html = IndexSpider(url, headers=headers)
      url = ChangeUrl(url)
      right = html.find("]")
      left = html.find("[")
      html = html
      lists = html.split("\",\"")
      for list in lists:
            l = list.split(",")
            jijindaima_list.append(l)
      for i in jijindaima_list:
            detail_url_list.append(ChangeUrl_2(i))
      for i in detail_url_list:
            url2_detail.append(DetailRequest(i))
      with open('w.txt', 'a', encoding='utf-8') as f:
            for list, l2 in zip(lists, url2_detail):
                l = list.split(",")
                f.writelines(l+'\t\t'+l+'\t\t'+l+'\t\t'+l+'\t\t'+l2+'\t\t'+l2+'\t\t'+l2+'\n')
                print('正在写入第{0}条记录……'.format(nw))
                nw = nw+1
      print("5秒后爬取下一页……")
      sleep(5)
哈哈,代码可能不会一直有效哦,欢迎大家学习,不懂的就在帖子下面问,我看到会回复的哦

mengsiyiren 发表于 2018-7-10 17:22

可以啊群主,多谢分享

xccxvb 发表于 2020-6-17 22:57

hqhlwz 发表于 2020-5-28 04:26
请问 如果爬取 指定一只基金所有的历史数据to csv该如何修改代码呢

大哥,这是我两年前的贴子,现在这个代码肯定是用不了了的,因为网页源码过了两年肯定改变了,现在只能当思路看看了{:301_971:}

我才不是狮子喵 发表于 2018-7-10 17:27

感谢分享,楼主辛苦了

byxiaoxie 发表于 2018-7-10 17:29

感谢分享,我最近也在学Python我拿去学习了,谢谢!{:301_987:}

wushaominkk 发表于 2018-7-10 18:01

标题格式不规范,已帮你修改,下次注意,请按要求插入代码
【公告】发帖代码插入教程
https://www.52pojie.cn/thread-713042-1-1.html

hualong1009 发表于 2018-7-10 18:08

看着很简单啊

hl908707 发表于 2018-7-10 18:14

老铁是做基金数据的啊

xccxvb 发表于 2018-7-10 20:29

wushaominkk 发表于 2018-7-10 18:01
标题格式不规范,已帮你修改,下次注意,请按要求插入代码
【公告】发帖代码插入教程
https://www.52pojie.c ...

好滴,谢谢:Dweeqw

xccxvb 发表于 2018-7-10 20:30

hl908707 发表于 2018-7-10 18:14
老铁是做基金数据的啊

不是的,我还是学生呢{:1_893:}

wjsxkk 发表于 2018-7-10 23:51

学习了,正准备学爬虫,谢谢
页: [1] 2
查看完整版本: 【python】爬取天天基金网数据