Python数据分析之证券之星沪深A股基本信息爬取与分析

本文介绍了使用Python爬取证券之星沪深A股基本信息的过程,包括获取和解析网页内容,以及后续的数据分析。在数据分析部分,作者计算了股价、进行了数据排序和可视化,观察到股价分布接近正态,市值和股本呈现正比关系,并分享了在爬虫过程中遇到的问题和解决方案。
摘要由CSDN通过智能技术生成

Python数据分析之证券之星沪深A股基本信息爬取与分析

上周爬取了证券之星上沪深A股的信息,我对股票完全是小白,对流通市值这些完全不了解,是上网先了解了一下,老实说虽然有了基本概念,但在数据分析时还是一头雾水,所以今天只说一下我在爬取和分析时遇到的问题(不涉及股票方面知识,只是分析数据只是分析数据只是分析数据),希望能对大家有帮助,也希望得到大家的意见!

爬取数据

获取网页内容

爬取方面依旧是我常用的结构,使用的pyquery,因为要爬取的内容直接就在html中,所以我只加了一个User-Agent的头。定义多个具有不同功能的函数,在这里需要注意一点,证券之星上是gbk编码,所以获取网页内容是需要添加encoding="gbk"

def get_page(url):
    try:
        doc = pq(url, headers=headers, encoding="gbk")
        # print(doc)
        return doc
    except:
        pass

通过在console中输入document.charset可查看网页的编码格式

解析网页内容

爬取过程总是有漏爬一页或两页数据的,找了好几次也没发现问题,所以希望知道的各位也能提点一下。因为网页打开总是很慢,有时候响应时间太长就自动断开,就加了try…except。

def parse_page(doc):
    try:
        tr_list = doc(".con #datalist").find("tr")
        # print(tr_list)
        for item in tr_list.items():
            try:
                coding = item(".select").text()
                name = item(".align_center").text().strip("0123456789")
                other_info = item(".align_right").text().split()
                nmc = other_info[0]
                mc = other_info[1]
                nc = other_info[2]
                cs = other_info[-1]
                yield {
   
                    "代码": coding,
                    "简称": name,
                    "流通市值(万元)": nmc,
                    "总市值(万元)": mc,
                    "流通股本(万元)": nc,
                    "总股本(万元)": cs
                }
            except:
                print("\033[1;30;47m此数据爬取中出现错误!\033[0m")
                break
        else:
            print("此页爬取完毕")
    except Exception as e:
        print("\033[1;30;41m错误为:\033[0m" + repr(e))

接下来就是翻页代码了,其实大同小异,没什么问题。

def next_page():
    for p in range(1, 126):
        print("第%d页开始爬取" % p)
        url_page = "https://quote.stockstar.com/stock/ranklist_a_1_0_" + str(p) + ".html"
        doc = get_page(url_page)
        for item in parse_page(doc):
            print(item)
            write_to_csv(item)
        else:
            print("%d页爬取完毕" % p)
        time.sleep(2)
    else:
        print("所有页面爬取完毕")


def write_to_csv(item):
    writer.writerow([item["代码"], item["简称"], item["流通市值(万元)"], item["总市值(万元)"], item["流通股本(万元)"], item["总股本(万元)"]])

注意一下,因为获取的网页是gbk编码,所以在保存文件时要注意文件也是gbk编码。


if __name__ == "__main__":
    # with open("证券之星沪深A股信息.csv", "w", encoding="gbk") as f:
    #     writer = csv.writer(f)
    #     writer.writerow(
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值