我正在嘗試逐行抓取不同的股票,資料來自https://www.slickcharts.com/sp500。我正在關注一個使用類似網站的教程,但是該網站對其每一行都使用類,而我的則沒有(附在下面)。
教程中使用的網站
想要的網站
這是我嘗試使用的代碼,但是我沒有得到任何輸出。我在編碼方面仍然很新,所以歡迎任何反饋。
import requests
import pandas as pd
from bs4 import BeautifulSoup
company = []
symbol = []
url = 'https://www.slickcharts.com/sp500' #Data from SlickCharts
page = requests.get(url)
soup = BeautifulSoup(page.text, 'html.parser')
rows = soup.find_all('tr')
for i in rows:
row = i.find_all('td')
print(row[0])
uj5u.com熱心網友回復:
首先,您需要在請求中添加一些標頭,因為您很可能得到與我相同的資訊: status code 403 Forbidden。這是因為該網站阻止了您的請求。添加User-Agent有訣竅:
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'
}
page = requests.get(url, headers=headers)
然后你可以tr像你一樣迭代標簽。但是你應該小心,因為,例如 firsttr沒有td標簽,你會在行中得到例外:
print(row[0])
這是列印所有公司名稱的代碼示例:
import requests
from bs4 import BeautifulSoup
company = []
symbol = []
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}
url = 'https://www.slickcharts.com/sp500' #Data from SlickCharts
page = requests.get(url, headers=headers)
soup = BeautifulSoup(page.text, 'html.parser')
rows = soup.find_all('tr')
for row in rows:
all_td_tags = row.find_all('td')
if len(all_td_tags) > 0:
print(all_td_tags[1].text)
但是這段代碼除了公司名稱之外還輸出了一些其他資料。這是因為您正在遍歷tr頁面上的所有標簽。但是您只需要迭代一個特定的表(在這種情況下頁面上的第一個表)。
import requests
from bs4 import BeautifulSoup
company = []
symbol = []
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}
url = 'https://www.slickcharts.com/sp500' #Data from SlickCharts
page = requests.get(url, headers=headers)
soup = BeautifulSoup(page.text, 'html.parser')
first_table_on_the_page = soup.find('table')
rows = first_table_on_the_page.find_all('tr')
for row in rows:
all_td_tags = row.find_all('td')
if len(all_td_tags) > 0:
print(all_td_tags[1].text)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/392385.html
