I am trying to scrape this table: https://www.coingecko.com/en/coins/recently_added?page=1
Here is my code:
import requests from bs4 import BeautifulSoup import csv root_url = "https://www.coingecko.com/en/coins/recently_added" html = requests.get(root_url) soup = BeautifulSoup(html.text, 'html.parser') paging = soup.find("div",{"class":"row no-gutters tw-flex flex-column flex-lg-row tw-justify-end mt-2"}).find("ul",{"class":"pagination"}).find_all("a") start_page = paging[1].text last_page = paging[len(paging)-2].text # # outfile = open('gymlookup.csv','w', newline='') # writer = csv.writer(outfile) # writer.writerow(["Name", "Address", "Phone"]) pages = list(range(1,int(last_page)+1)) for page in pages: url = 'https://www.coingecko.com/en/coins/recently_added?page=%s' %(page) html = requests.get(url) soup = BeautifulSoup(html.text, 'html.parser') #print(soup.prettify()) print ('Processing page: %s' %(page)) coins = soup.findAll("div",{"class":"coingecko-table"}) for element in coins: coin = element.find(class_='coin-name text-left tablesorter-header tablesorter-headerUnSorted') price = element.find(class_='price text-right sorter-numeric tablesorter-header tablesorter-headerUnSorted') print(coin,price) # hr = element.find('change1h').text # last_added = element.find('last_added').text # writer.writerow([coin, price, hr,last_added]) # # outfile.close() print('Done')
The print(coin,price) fails to print anything. Not sure why, any help welcome :)
Advertisement
Answer
Just use pandas
to get the table data.
Here’s how:
import pandas as pd import requests url = "https://www.coingecko.com/en/coins/recently_added?page=1" df = pd.read_html(requests.get(url).text, flavor="bs4") df = pd.concat(df).drop(["Unnamed: 0", "Unnamed: 1"], axis=1) df.to_csv("your_table.csv", index=False)
Output: