![](/img/trans.png)
[英]Get Dynamic Tabular from Website data using Selenium & Beautiful Soup
[英]Scraping a Dynamic Website using Selenium or Beautiful Soup
我正在嘗試 web 抓取此動態網站以獲取學期期間提供的課程名稱和講座時間: https://www.utsc.utoronto.ca/registrar/timetable
問題是當您第一次進入網站時,還沒有顯示任何課程,只有在選擇“Session(s)”並單擊“Search for Courses”后,課程才會開始顯示。
這是問題開始的地方:
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中使用詢問,所以如果我的問題不夠清楚等,請告訴我。對不起,提前謝謝!
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,看看您是否可以在那里操作數據。
您可以使用此代碼獲取所需的數據:
import requests
url = "https://www.utsc.utoronto.ca/regoffice/timetable/view/api.php"
# for winter session
payload = "coursecode=&sessions%5B%5D=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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.