类中的python重复函数

2024-07-01 07:44:44 发布

您现在位置:Python中文网/ 问答频道 /正文

首先,如果我使用了错误的术语或者我对基本概念的理解有缺陷,请原谅。我只是在学习如何构建使用类的脚本。。。我是Python/coding的新手。在

原则上,我想知道是否有方法在一个类中调用同一个func两次。如果我简单地解释一下我想做什么,也许会有一些意义。。。在

我正在尝试编写一个web“scraper”,它解析一个种子网页,根据一些给定的参数返回url,跟踪这些url,做同样的事情(可能n次),最后在链接底部返回一个pdf文件。这是为了加速我的同事们目前手工收集的一些内容。(我已经用我以前相对基本的迭代节省了几个月的体力劳动。)

这是我目前使用的一种方法,但我编写的代码并不是真正的可伸缩或易于重用的,我想尝试使它更通用(我目前正在为每个实例手动编写脚本)。在

(我想)我想构建一个名为siteInstance的类,用来保存种子url、保存位置、标题、u:p、cookie和各种函数。我用它来浏览整个网站以获取目标内容。在

我使用了一个重复函数来解析目标URL并返回下一层URL。这些都是基于一些特定于站点的RegEx,所以我知道我必须为url的每一层提供搜索过滤器(RegEx)。我希望能够重用解析器,但是需要使用特定于层的Regex。干是一件事对吗?在

在我看来,这意味着我有一个函数叫做siteInstance.parser,我在每个siteInstance.class(例如,siteInstance.parserA表示第一层,siteInstance.parserB表示第二层。。。siteInstance.parsern用于第n层)

下面是一个简化版本,实际上在每一层都有许多清理/准备步骤,以正确生成下一层的目标url列表。这包括为保存的二进制文件创建一个文件结构,写入日志,并为该层触发RegEx等等

这是一个两层的例子,但是我知道至少有4个层可以满足。在

示例:种子 {URL:www.journalTitle.com}

第一次通过的结果(第1层): [{IssueURL2010:www.journalTitle.com/2010},{IssueURL2011:www.journalTitle.com/2011},{IssueURL2012:www.journalTitle.com/2012},{IssueURLn:www.journalTitle.com/n}]

对于IssueURL2010(第2层): [{article1_2010URL:www.journalTitle.com/2010/1},{article2_2010URL:www.journalTitle.com/2010/2},{article3_2010URL:www.journalTitle.com/2010/3},{articlen_2010URL:www.journalTitle.com/2010/n}]

article1_2010UR我可以得到www.journalTitle.com/2010/1.pdf

我希望这有意义。。。在


Tags: 文件方法函数脚本comurl目标pdf
1条回答
网友
1楼 · 发布于 2024-07-01 07:44:44

您可以在单独的类中定义解析逻辑,并在实例(或类)属性中实例化几次:

class URLParser(object):
    def __init__(self, regexp, ...):
        self.regexp = regexp
        ...

    def parse_urls(self, urls):
        # do your URL parsing thing
        # return parsed URLs

class SiteInstance(object):
    def __init__(self, ...):
        self.parsers = [
            URLParser('regexp1'),
            URLParser('regexp2'),
            ...
        ]

    def parse(self, ...):
        ...
        for parser in self.parsers:
            parser.parse_urls(...)

相关问题 更多 >

    热门问题