python - 我如何知道我何时完成对域的抓取?

标签 python web-crawler mechanize

我用 Python 编写了一个函数,可以获取页面上的所有链接。 然后,我对第一个函数返回的所有链接运行该函数。

我的问题是,如果我继续使用 CNN 作为起点,我怎么知道我何时爬取了 CNN 的所有(或大部分)网页?

这是爬虫的代码。

base_url = "http://www.cnn.com"
title = "cnn"
my_file = open(title+".txt","w")

def crawl(site): 
    seed_url = site
    br = Browser()

    br.set_handle_robots(False)
    br.set_handle_equiv(False)

    br.open(seed_url)

    link_bank = []

    for link in br.links():
        if link.url[0:4] == "http":
            link_bank.append(link.url)
        if link.url[0] == "/":
            url = link.url
            if url.find(".com") == -1:
                if url.find(".org") == -1: 
                    link_bank.append(base_url+link.url)
                else:
                    link_bank.append(link.url)
            else:
                link_bank.append(link.url)

        if link.url[0] == "#":
            link_bank.append(base_url+link.url)

    link_bank = list(set(link_bank))

    for link in link_bank:
        my_file.write(link+"\n")

    return link_bank

my_file.close()

最佳答案

我没有专门研究您的代码,但您应该了解如何实现广度优先搜索,并另外将已访问过的 URL 存储在 set 中。如果您在当前访问的页面中发现新的 URL,则将其附加到要访问的 URL 列表中(如果它不在集合中)。

您可能需要忽略查询字符串(URL 中问号后面的所有内容)。

关于python - 我如何知道我何时完成对域的抓取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22599290/

相关文章:

javascript - 如果 javascript Onclick() 有 Mechanize ,如何点击按钮

python - os.path.join(p1,p2) 省略 p1 的斜杠

python - 如何分析此 Pandas DataFrame 中的所有重复条目?

python - 模拟函数内部导入的模块

screen-scraping - 从本地主机网站上的所有页面获取 <title> 值列表的最快方法

python - 如何用scrapy抓取每个链接的所有内容?

python - Python3 中的简单网络爬虫不产生输出。这是怎么回事?

python urllib, urllib2 如何获取 SHARP 链接

python - 调用 flask restful API 资源方法

登录后 Ruby Mechanize 和更改 URL