我正在嘗試通過網路抓取這個動態網站來獲取一個學期提供的課程名稱和授課時間:https : //www.utsc.utoronto.ca/registrar/timetable
問題是當您第一次進入網站時,還沒有顯示課程,只有在選擇“會話”并單擊“搜索課程”后,課程才會開始顯示。
這是問題開始的地方:
- 我不能做
html = urlopen(url).read()
使用 urllib.request,因為它只會在沒有頁面時顯示頁面的 HTML。
- 我快速搜索了如何抓取動態網站并運行如下代碼:
import requests
url = 'https://www.utsc.utoronto.ca/registrar/timetable'
r= requests.get(url)
data = r.json()
print(data)
但是,當我運行它時,它回傳“JSONDecodeError: Expecting value”,我不知道為什么它在其他動態網站上運行時會發生這種情況。
我真的不必使用 Selenium 或 Beautiful Soup,所以如果有更好的替代品,我會很樂意嘗試。我也想知道什么時候:
html = urlopen(url).read()
回傳的html格式是什么?我想知道是否可以在選擇會話并單擊搜索后通過檢查網站復制更改后的 HTML。
ps:這是我第一次在 stackoverflow 中使用 ask,所以如果我的問題不夠清楚,請告訴我,等等。抱歉,提前致謝!
uj5u.com熱心網友回復:
您可以使用此代碼來獲取您需要的資料:
import requests
url = "https://www.utsc.utoronto.ca/regoffice/timetable/view/api.php"
# for winter session
payload = "coursecode=&sessions[]=20219&instructor=&courseTitle="
headers = {
'content-type': 'application/x-www-form-urlencoded; charset=UTF-8'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
uj5u.com熱心網友回復:
def render_page(url):
driver = webdriver.Chrome(PATH)
driver.get(url)
r = driver.page_source
driver.quit()
return r
#render page using chrome driver and get all the html code on that certain webpage
def create_soup(html_text):
soup = BeautifulSoup(html_text, 'lxml')
return soup
如果內容是動態加載的,您將需要為此使用 selenium。使用 render_page() 的回傳值創建一個 Beutiful Soup 并查看您是否可以操作那里的資料。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/361647.html
