我想了解Beautifulsoup的源代码。
其源代码的前几行是:
class Beautifulsoup(Tag):
def __init__(self, markup="", features=None, builder=None,
parse_only=None, from_encoding=None, exclude_encodings=None,
**kwargs):
...
第一行只有一个名为“Tag”的参数,但 init 函数中有更多参数。另一方面,我知道我们通常会以某种方式使用beautifulsoup:
from bs4 import Beautifulsoup
bsobj = Beautifulsoup(text, parser)
更新: 正如在@BusyAnt @Vatine的回答中所说,Tag不是一个论据,而是Beautifulsoup的超级类。我在另一个文件中找到了Tag的类定义:
class Tag(PageElement):
"""Represents a found HTML tag with its attributes and contents."""
def __init__(self, parser=None, builder=None, name=None, namespace=None,
prefix=None, attrs=None, parent=None, previous=None):
"Basic constructor."
最后,PageElement也是在同一个文件中定义的类:
class PageElement(object):
"""Contains the navigational information for some part of the page
(either a tag or a piece of text)"""
的whooo!
答案 0 :(得分:1)
Tag
是BeautifoulSoup
继承的类。这不是一个论点。请take a look at this了解详情。
至于__init__
中的参数: self
是指将要创建的类的实例。其他参数使用默认值写入,这意味着如果在调用方法时未指定,则它们将采用此值。正如您在示例中指定了两个没有名称的参数一样,将使用位置顺序,即markers=text
和features=parser
。 Here是开始学习它的好方法。
我不愿意听起来很苛刻,但是当你不熟悉类,对象和类的概念时,可能不是开始在这个源代码中游荡的最佳选择Python中的其他一些基本内容。
答案 1 :(得分:1)
行class BeautifulSoup(Tag):
表示"请开始定义名为BeautifulSoup的类,继承自Tag"类。
行def __init__(self, markup="", features=None...
表示"让类的构造函数接受参数...",第一个是实例,构造函数方法被调用on(没有必要调用此self
,但强烈推荐)。其余参数的工作方式类似于普通函数。
在您显示的特定调用中,markup
将获得text
的值features
和parser
''
的值{你不使用任何关键字,因此它们是位置的,大多数都具有默认值。)