在python递归中使用Selenium爬行整个网站

时间:2019-07-15 17:16:49

标签: python selenium selenium-webdriver web-crawler

我是python的新手,我尝试使用selenium爬行整个网站。 我想用硒来做到这一点,因为我想获得所有使用该网站的cookie。我知道其他工具可以更轻松,更快速地抓取网站,但是其他工具不能给我所有Cookie(第一方和第三方)。

这是我的代码:

from selenium import webdriver
import os, shutil


url = "http://example.com/"
links = set()


def crawl(start_link):
    driver.get(start_link)
    elements = driver.find_elements_by_tag_name("a")
    urls_to_visit = set()

    for el in elements:
        urls_to_visit.add(el.get_attribute('href'))

    for el in urls_to_visit:
        if url in el:
            if el not in links:
                links.add(el)
                crawl(el)
            else:
                return


dir_name = "userdir"
if os.path.isdir(dir_name):
    shutil.rmtree(dir_name)
co = webdriver.ChromeOptions()
co.add_argument("--user-data-dir=userdir")
driver = webdriver.Chrome(options = co)
crawl(url)
print(links)
driver.close();

我的问题是,爬网功能显然无法打开网站上的所有页面。在某些网站上,我可以手动导航到未实现该功能的页面。为什么?

1 个答案:

答案 0 :(得分:0)

我在使用webdriver时注意到的一件事是它需要时间来加载页面,这些元素不能像常规浏览器那样立即可用。

您可能要添加一些延迟,或者添加一个循环以检查某种类型的页脚,以表明该页面已加载并且可以开始爬网。