如何抓取不是直接用HTML编写,而是用JavaScript自动生成的网页?

2024-10-02 22:26:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图从http://washingtonmonthly.com/college_guide?ranking=2016-rankings-national-universities网站上搜刮。你知道吗

这个网站是用JavaScript自动生成来更新DOM树的,我尝试了下面的Selenium代码来获取表中的元素,但是它返回了一个空列表。你知道吗

from selenium import webdriver
import time


driver = webdriver.Chrome(executable_path="C:\\chrme\\chromedriver")
driver.get('http://washingtonmonthly.com/college_guide?ranking=best-colleges-for-adult-learners-4-year-colleges')
time.sleep(5)
test = driver.execute_script("return document.getElementsByClassName('tablesaw tablesaw-swipe')")
print(test)

有没有办法运行这些脚本并获取HTML代码?我使用的是python3.6


Tags: 代码testimportcomhttptime网站driver
2条回答

运行这个脚本,我想它将为您提供表中包含的所有内容,包括csv输出。你知道吗

import csv
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)
outfile = open('table_data.csv','w',newline='')
writer = csv.writer(outfile)
driver.get("http://washingtonmonthly.com/college_guide?ranking=2016-rankings-national-universities")

wait.until(EC.frame_to_be_available_and_switch_to_it("iFrameResizer0"))
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, 'table.tablesaw')))

tab_data = driver.find_element_by_css_selector('table.tablesaw')
list_rows = [[cell.text for cell in row.find_elements_by_css_selector('td')]
             for row in tab_data.find_elements_by_css_selector('tr')]
for data in list_rows:
    writer.writerow(data)
    print(data)

driver.quit()

顺便说一句,我假设您已经安装了lxml库。你知道吗

首先,当我输入链接时,它说页面不存在。你知道吗

如果你想得到一个自动生成的页面,你必须使用chromedev工具,看看哪个请求正在执行代码。你知道吗

因此,如果您看到一个GET请求返回生成的html,您必须接受该请求并在代码中使用它。你知道吗

如果对你有帮助就告诉我。你知道吗

相关问题 更多 >