与BeautifulSoup的爬行深度

时间:2017-12-20 14:35:56

标签: python python-3.x web-scraping beautifulsoup rcrawler

beautifulsoup包中是否有一个允许用户在站点内设置爬行深度的功能?我对Python比较陌生,但我之前在R中使用过Rcrawler,而Rcrawler提供了“MaxDepth”,因此爬虫将从该域内的主页进入一定数量的链接。

Rcrawler(Website = "https://stackoverflow.com/", no_cores = 4, no_conn = 4, ExtractCSSPat = c("div"), ****MaxDepth=5****)

Python中当前脚本的基础知识解析了页面上的所有可见文本,但我想设置一个爬行深度。

from bs4 import BeautifulSoup
import bs4 as bs
import urllib.request

def tag_visible(element):
    if element.parent.name in ['style', 'script', 'head', 'title', 'meta', '[document]']:
        return False
    elif isinstance(element,bs.element.Comment):
        return False
    return True


def text_from_html(body):
    soup = BeautifulSoup(html, 'lxml')
    texts = soup.findAll(text=True)
    visible_texts = filter(tag_visible, texts)  
    return u" ".join(t.strip() for t in visible_texts)

html = urllib.request.urlopen('https://stackoverflow.com/').read()
print(text_from_html(html))

感谢任何见解或指导。

1 个答案:

答案 0 :(得分:0)

BeautifulSoup中没有任何功能,因为BeautifulSoup不是crawler 它仅使用HTML解析字符串,因此您可以搜索HTML

requests中没有任何功能,因为requests也不是crawler 它只从服务器读取数据,因此您可以将其与BeautifulSoup或类似的一起使用。

如果您使用BeautifulSouprequest,则必须自行完成所有操作 - 您必须从头开始构建爬网系统。

Scrapy是真正的抓取工具(或者更确切地说是构建蜘蛛和抓取网络的框架) 它有选项DEPTH_LIMIT