上周爬取了证券之星上沪深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(