Python爬虫技术问询:如何为每条董事会成员记录添加对应爬取所用的股票代码
如何为爬取的董事会成员数据添加对应股票代码列?
嘿,作为Python新手遇到这个问题太正常了,其实解决思路特别直接——让每条爬取到的董事会成员记录,和当前遍历的股票代码绑定在一起就行,下面给你两种可行方案,优先推荐第一种,高效又直观:
方案一:爬取时直接绑定股票代码(推荐)
你只需要在把每条记录添加到总列表data之前,把当前循环的ticker追加到这条记录的末尾。这样每条子列表自然就包含了对应的股票代码,后续转成DataFrame时直接指定列名即可。
修改后的完整代码如下:
import requests from bs4 import BeautifulSoup import pandas as pd data = [] tickers= ['MKL','FB','AAPL','ADBE'] headers = {} # 这里补充你已有的header变量 for ticker in tickers: # 用f-string拼接URL更简洁可读 page = requests.get(f'https://www.wsj.com/market-data/quotes/{ticker}/company-people', headers=headers) soup = BeautifulSoup(page.content, 'html.parser') table = soup.find_all("table", {"class":"cr_dataTable cr_board_table"})[-1] table_rows = table.find_all('tr') for tr in table_rows: td = tr.find_all('td') # 加strip()清理原始文本前后的多余空格,优化数据质量 row = [td_item.text.strip() for td_item in td] row.append(ticker) # 关键一步:把当前股票代码追加到这条记录里 data.append(row) # 转换为DataFrame并指定列名 df = pd.DataFrame(data, columns=['Name/Title', 'Current Board Membership', 'Ticker']) print(df.head())
改动细节说明:
- 用f-string拼接URL,比字符串相加更简洁易读
- 给提取的文本加了
strip(),去掉原始数据里多余的前后空格 - 核心新增代码
row.append(ticker),让每条记录和对应股票代码直接绑定
方案二:已生成data后,转DataFrame再补全股票代码
如果已经有了不带股票代码的data列表,也可以通过统计每个股票代码对应的记录数,生成一个重复对应次数的ticker列表,再赋值给DataFrame的新列。不过这种方法需要二次请求页面统计数量,效率不如方案一:
import pandas as pd # 假设已经有了原始的data列表 tickers= ['MKL','FB','AAPL','ADBE'] headers = {} # 补充你的header变量 # 先统计每个ticker对应的记录数 ticker_counts = [] for ticker in tickers: page = requests.get(f'https://www.wsj.com/market-data/quotes/{ticker}/company-people', headers=headers) soup = BeautifulSoup(page.content, 'html.parser') table = soup.find_all("table", {"class":"cr_dataTable cr_board_table"})[-1] ticker_counts.append(len(table.find_all('tr'))) # 生成对应重复次数的ticker列表 ticker_col = [] for ticker, count in zip(tickers, ticker_counts): ticker_col.extend([ticker]*count) # 转成DataFrame并添加新列 df = pd.DataFrame(data, columns=['Name/Title', 'Current Board Membership']) df['Ticker'] = ticker_col print(df.head())
显然方案一更省心,不需要额外请求页面统计数量,直接在第一次爬取时就完成数据绑定,后续拆分列、上传CRM等操作也能顺畅进行。
内容的提问来源于stack exchange,提问作者Jake Bromsey
相关产品推荐
相关产品推荐

