在Python中,要实现一个深度优先爬虫,可以使用递归或栈来实现。这里是一个简单的深度优先爬虫示例,使用了递归的方式:
首先,确保已经安装了requests和beautifulsoup4库,如果没有安装,可以使用以下命令安装:
pip install requests beautifulsoup4 然后,创建一个名为dfs_spider.py的文件,并添加以下代码:
import requests from bs4 import BeautifulSoup def get_links(url): response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') links = set() for link in soup.find_all('a', href=True): links.add(link['href']) return links def dfs_crawl(url, visited=None): if visited is None: visited = set() if url in visited: return print(url) visited.add(url) links = get_links(url) for link in links: dfs_crawl(link, visited) if __name__ == '__main__': start_url = 'https://example.com' # 替换为你想要开始爬取的网址 dfs_crawl(start_url) 在这个示例中,我们定义了两个函数:
get_links(url):这个函数接收一个URL作为参数,然后使用requests库获取网页内容,并使用BeautifulSoup库解析HTML。接着,它从HTML中提取所有的链接,并将它们添加到一个集合中。最后,函数返回这个包含所有链接的集合。
dfs_crawl(url, visited=None):这个函数实现了深度优先爬取。它接收一个URL和一个可选的已访问链接集合作为参数。如果没有提供已访问链接集合,函数将创建一个新的空集合。然后,函数检查给定的URL是否已经在已访问链接集合中。如果是,函数直接返回。否则,函数将打印当前URL,将其添加到已访问链接集合中,并使用get_links()函数获取当前页面中的所有链接。最后,对于每个链接,函数递归地调用自身,继续深度优先爬取。
在__main__部分,我们定义了一个起始URL,并调用dfs_crawl()函数开始爬取。请注意,你需要将start_url变量替换为你想要开始爬取的网址。