python - 如何使用 beautifulsoup 抓取整个网站

标签 python beautifulsoup

我试图通过递归调用 all_pages 函数来获取网站的所有唯一网址,但该函数并未给出网站的所有网址。

我想做的就是使用 BeautifulSoup 获取网站的所有唯一网址。我的代码如下所示:

base_url = "http://www.readings.com.pk/"
unique_urls=[]

def all_pages(base_url,unique_urls=[]):

    response = requests.get(base_url)
    soup = BeautifulSoup(response.content, "html.parser")

    for link in soup.find_all("a"):
        url = link["href"]
        absolute_url = urljoin(base_url, url)
        if absolute_url not in unique_urls:

            if base_url in absolute_url:

                unique_urls.append(absolute_url)
                print (absolute_url)

                all_pages(absolute_url,unique_urls,book_urls)





all_pages(base_url,unique_urls)

最佳答案

使用response.text而不是response.content

此外,您需要在某个时候返回。此外,不要将 unique_urls 设为列表,而是将其设为集合,这样它们将始终是唯一的。

此外,您的方法是递归的,并且 python 有一个 max recursion depth ,所以也许你应该这样做:

base_url = "http://www.readings.com.pk/"

def all_pages(base_url):

    response = requests.get(base_url)
    unique_urls = {base_url}
    visited_urls = set()
    while len(unique_urls) > len(visited_urls)
        soup = BeautifulSoup(response.text, "html.parser")

        for link in soup.find_all("a"):
            try:
                url = link["href"]
            except:
                continue
            absolute_url = base_url + url
            unique_urls.add(absolute_url)

        unvisited_url = (unique_urls - visited_urls).pop()
        visited_urls.add(unvisited_url)
        response = requests.get(unvisited_url)

    return unique_urls

all_pages(base_url)

关于python - 如何使用 beautifulsoup 抓取整个网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42219699/

相关文章:

python - 找不到别名的词法分析器

python - 我想从具有类值的 div 打印数据,但我的代码不断从另一个类似的 div 返回其他数据

python - 如何根据 python pandas.Dataframe 中的列表分配标签?

python - 读取时间序列 csv 文件以使用 matplotlib 进行绘图

python - 将数组添加到 numpy 数组

python - 从 Python 列表中删除 BeautifulSoup 标签

Python循环通过csv文件中的url返回\ufeffhttps ://

python - 美汤python中的find()和find_all()有什么区别?

python - 如何在Python中以某种方式调整矩阵的大小?

python - cx_freeze + PyQt5 + python