selenium を使って次へボタンをクリックしながらテーブルの中身を取得していくなら、このような感じですかね。
python
1import csv
2import time
3from bs4 import BeautifulSoup
4from selenium import webdriver
5
6driver = webdriver.Chrome(r'chromedriver.exe のパス')
7driver.get('https://www.americanfunds.com/individual/investments/quarterlyholdings/anefx')
8
9def next_page_exists():
10 '''次のページボタンが存在するかどうか
11 '''
12 try:
13 driver.find_element_by_css_selector('button.next-btn')
14 return True
15 except NoSuchElementException:
16 return False
17
18def table_to_list(table):
19 '''テーブルの中身を2次元のリストで返す。
20 '''
21 data = []
22 for tr in table.find_all('tr')[1:]:
23 row = [td.text for td in tr.find_all('th')]
24 data.append(row)
25 return data
26
27def click_next_button():
28 '''次のページボタンをクリックする。
29 '''
30 driver.find_element_by_css_selector('button.next-btn').click()
31
32data = []
33i = 1
34while next_page_exists():
35 print('fetching page {}...'.format(i))
36 soup = BeautifulSoup(driver.page_source, "lxml")
37 table = soup.select_one('div.row table')
38 data.extend(table_to_list(table))
39
40 i += 1
41 click_next_button() # 次のページへ
42 time.sleep(2) # ajax のロード待機
43
44# CSV 書き込み
45header = ['Security Name',
46 'Asset Type',
47 'Shares',
48 'Market Value',
49 'Percent of Net Assets']
50with open('output.csv', 'w', newline='') as f:
51 writer = csv.writer(f)
52 writer.writerow(header)
53 writer.writerows(data)
54
csv
1Security Name,Asset Type,Shares,Market Value,Percent of Net Assets
2"Netflix, Inc.",Equity,"2,495,000","$667,811,700.00",3.64%
3Broadcom Inc.,Equity,"2,244,000","$570,604,320.00",3.11%
4"Amazon.com, Inc.",Equity,"257,155","$386,239,095.00",2.1%
5Tencent Holdings Ltd.,Equity,"9,488,200","$380,473,124.00",2.07%
6"Samsung Electronics Co., Ltd.",Equity,"10,131,500","$349,951,249.00",1.91%
7Galaxy Entertainment Group Ltd.,Equity,"54,684,000","$347,776,413.00",1.89%
8"Micron Technology, Inc.",Equity,"9,260,800","$293,845,184.00",1.6%
9AbbVie Inc.,Equity,"3,130,430","$288,594,342.00",1.57%
10FED HM LN BK DISC NT 3/6/2019,Short Term,"282,000,000","$280,794,337.00",1.53%
11"Alphabet Inc., Class C",Equity,"262,238","$271,576,295.00",1.48%
12Kotak Mahindra Bank Ltd.,Equity,"13,957,882","$251,207,888.00",1.37%
13U S TREASURY BILL 3/7/2019,Short Term,"250,000,000","$248,955,550.00",1.36%
14"SK hynix, Inc.",Equity,"4,224,300","$229,442,351.00",1.25%
15Novartis AG,Equity,"2,666,500","$227,787,715.00",1.24%
16"Alphabet Inc., Class A",Equity,"204,995","$214,211,575.00",1.17%
17Abbott Laboratories,Equity,"2,949,000","$213,301,170.00",1.16%
18"Molina Healthcare, Inc.",Equity,"1,727,700","$200,793,294.00",1.09%
19以下略