在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=https://www.yisu.com/ask/True):'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
变量替换为你想要开始爬取的网址。