我们点开其他年份的GDP数据时,会发现网站的变化只有后面的数字变成了相应的年份,所以我们可以通过for循环来实现对多页数据的爬取
from selenium import webdriver
from bs4 import BeautifulSoup
import csv
driver=webdriver.Chrome()
out=open('d:/gdp.csv','w',newline='')
csv_write=csv.writer(out,dialect='excel')
for year in range(1960,2020):
url="https://www.kylc.com/stats/global/yearly/g_gdp/%d.html"%year
xpath="/html/body/div[2]/div[1]/div[5]/div[1]/div/div/div/table"
driver.get(url)
tablel=driver.find_element_by_xpath(xpath).get_attribute('innerHTML')
soup=BeautifulSoup(tablel,"html.parser")
table=soup.find_all('tr')
for row in table:
cols=[col.text for col in row.find_all('td')]
if len(cols)==0 or not cols[0].isdigit():
continue
cols.append(year)
csv_write.writerow(cols)
out.close()
driver.close()
这里要先注意,打开文件只运行一遍,也就是要放到for循环外面,不然新数据会覆盖掉原数据
年份是从1960年到2019年,所以range参数到2020
同时url也需要更改,改为
url="https://www.kylc.com/stats/global/yearly/g_gdp/%d.html"%year
为了不混淆年份对应的GDP,可以在最后面加上一个年份
自此,爬取GDP数据结束