看ChatGPT是如何教我爬取上千家上市公司的股票代码

1,533 阅读3分钟

现在有一个这样的需求,要爬取雪球网上A股的股票名称、代码和总市值这些信息并把它保存到execl表格中。对于一个新手想学习爬虫,如何通过chatGPT来完成这个任务呢?

首先,我们把自己的需求详细的描述向ChatGPT提问,问题描写的越详细越好,例如: 然后,我们把代码复制到编辑器运行,如下图: 没有任何返回值,估计是出错了,我们先打印一下content的值看看,如下图: 的确是出错了。我在把出错的问题进行描述,再向ChatGPT进行提问。如下图: 上述的回答中解析了为什么会出现这种错误,并给出了解决方法。我们采用第一种方式,为代码添加请求头,再次执行。 这次就成功把网页的内容返回了。但是页面中的内容并没有我们想要的信息。

通过观察爬取的页面,刚打开页面是没有我们想要的信息,当我们点击了开始选股,才加载数据。

没有点击的

点击后的结果

通过浏览器开发者工具,发现点击后,是请求以下这个地址,获取结果进行加载的。

弄清楚了请求地址,我们再次向chatGPT提问。

上述代码,它没有添加请求头,所以,我们要自行添加请求头

关键代码如下:

import requests

url = 'https://xueqiu.com/service/screener/screen?category=CN&exchange=sh_sz&areacode=&indcode=&order_by=symbol&order=desc&page=1&size=30&only_count=0&current=&pct=&mc=&volume=&_=1684212843562'

# 发送 HTTP 请求获取 JSON 数据
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
response = requests.get(url, headers=headers)
data = response.json()




# 提取股票信息
stocks = data['data']['list']

# 遍历股票信息并输出股票名称和代码
for stock in stocks:
    name = stock['name']
    code = stock['symbol']
    print(name, code)

执行结果如下:

上述代码只是爬取单页的,现在我们要爬取多页的数据,把这个需求描述发给chatGPT,看它是如何解决的。

上述代码,它没有添加请求头,所以,我们要自行添加请求头

关键代码:

import requests

def crawl_stock_data(page_num):
    url = f'https://xueqiu.com/service/screener/screen?category=CN&exchange=sh_sz&areacode=&indcode=&order_by=symbol&order=desc&page={page_num}&size=30&only_count=0&current=&pct=&mc=&volume=&_=1684212843562'

    # 发送 HTTP 请求获取 JSON 数据
    response = requests.get(url)
    data = response.json()

    # 提取股票信息
    stocks = data['data']['list']

    # 遍历股票信息并输出股票名称和代码
    for stock in stocks:
        name = stock['name']
        code = stock['symbol']
        print(name, code)

# 执行多页爬取数据
total_pages = 10  # 假设要爬取10页的数据
for page in range(1, total_pages + 1):
    crawl_stock_data(page)

下面就是把爬取的数据保存到execl中,再次把需求描述给chatGPT,看它是如何回复的: 这次又忘记添加请求头,于是,我提示它加上请求头。 关键代码如下:

import requests
import pandas as pd

def crawl_stock_data(page_num):
    url = f'https://xueqiu.com/service/screener/screen?category=CN&exchange=sh_sz&areacode=&indcode=&order_by=symbol&order=desc&page={page_num}&size=30&only_count=0&current=&pct=&mc=&volume=&_=1684212843562'

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
    }
    
    # 发送 HTTP 请求获取 JSON 数据
    response = requests.get(url, headers=headers)
    data = response.json()

    # 提取股票信息
    stocks = data['data']['list']
    stocks_list =[{'name': item.get("name"),'symbol':item.get("symbol"), 'volume':item.get("volume")} for item in stocks ]
    # 创建DataFrame保存股票数据
    df = pd.DataFrame(stocks_list, columns=['name', 'symbol',"volume"])
    return df


# 执行多页爬取数据
total_pages = 50  # 假设要爬取10页的数据
dfs = []
for page in range(1, total_pages + 1):
    df = crawl_stock_data(page)
    print(df)
    dfs.append(df)

result_df = pd.concat(dfs, ignore_index=True)
# 保存数据到Excel文件
result_df.to_excel('stock_data.xlsx', index=False)

执行成功的结果如下:

代码是完成了我们的需求,但是代码缺乏异常捕捉,如果代码出现错误后,会整个代码停止执行。

总结

利用chatGPT学习爬虫是一个非常好的办法,只要我们把需求和问题向它描述,它都能分析错误和给出解决方法。大大的节省了收集资料的时间,提高了学习的效率。

本文由mdnice多平台发布