我试图抓一个网站进行研究,而且我被困了。我希望刮刀读取页面源,并将其附加到本地HTML文件,以便我可以分析校外数据。我已尝试使用BeautifulSoup
和Scrapy
,但我发现我需要使用Selenium
与该网页进行互动,以浏览我所在大学的身份验证系统。 (我不包括该代码,因为它与我的问题相关。)
当我运行脚本时,它会导航到该页面并单击该链接,但它只会保存第一页的HTML。然后,每次点击链接时,它都会复制并附加该页面的HTML。
如何使用Selenium
点击下一页链接,抓取HTML并保存到文件,直到我到达最后一页?
source = driver.page_source
while True:
with open("test.html", "a") as TestFile:
TestFile.write(source)
try:
driver.implicitly_wait(200)
driver.find_element_by_css_selector('li.next').click()
except AttributeError:
break
编辑:我将AttributeError添加到except并收到以下错误。
selenium.common.exceptions.StaleElementReferenceException:消息: 陈旧元素引用:元素未附加到页面文档
我的假设是我需要放慢.click()
的速度,这就是为什么我最初有隐含的等待,但这似乎并没有成功。
答案 0 :(得分:0)
您需要在while循环中将function nl2br(str, is_xhtml) {
var breakTag = (is_xhtml || typeof is_xhtml === 'undefined') ? '<br />' : '<br>';
return (str + '').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1' + breakTag + '$2');
}
$(document).ready(function(){
$.post("/text.php",function(result){ result=nl2br(result); $("body").append(result);});
});
分配给page source
变量。
source