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

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

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

Python数据分析之证券之星沪深A股基本信息爬取与分析_第1张图片

爬取数据

获取网页内容

爬取方面依旧是我常用的结构,使用的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可查看网页的编码格式

Python数据分析之证券之星沪深A股基本信息爬取与分析_第2张图片

解析网页内容

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

你可能感兴趣的:(python数据分析,数据分析,python)