Python + Selenium: 如何优化自动化爬取目标的体系结构配置

实现较高程度的自动化爬虫工作,除了较灵活巧妙的逻辑算法外,关键的还是要依赖适应自动化条件的模式配置。没有错,确实是需要把自动爬取任务当作一项“服务“看待。(此处省略两三百百字,因Markdown bug被吞)

现在来看如何通过优化配置而简化代码提高可维护性和健壮性的。使用过Selenium的应该知道,定位元素Element的方法只有几种,如定位id、class、tagname、css等。这种固定的规律,使得配置自动化成为可能。为了简化案例的描述,使之更容易理解。这里只选取其中id和class两种常用的定位方法来加以说明。

案例:自动爬取配置的新闻网站特定栏目焦点内容

通常新闻资讯网站的栏目焦点内容出现的方式是比较规律的。因此,可以较为容易的通过定位特定HTML标签获得目标集。那么,如何实现自动化配置?

设计模式中,有个比较流行的MVC模式。类似地,为何不将解析任务和目标体系结构的描述工作进行分离?按照一定的协议,将多个可变目标体系结构封装成规律有序的数据结构。如此,因特网多变因素而引起的问题,就被单独分离出来处理变得可控。一旦目标体系结构发生变动,只需修改对应配置,而无需反复“推翻式”修改代码。原本严重依赖目标体系结构的解析处理代码变得“健壮”。

假设,将目标访问网址、定位方法和解析规则编撰为字典。爬取目标时,仅需从配置的字典读取对应规则,即可对目标开展访问和解析处理工作。目标的HTML结构发生变动,也是修改配置即可。就相当与MVC里的M模型(Model)和C控制器(Control)的相对独立、互不干扰的关系。真正实现优化配置实现自动化的目标。

实现代码:


class MyModule:

    def __init__(self):
        self.bys={'id':0, 'class':1}
        self.urls={'guancha.cn':{'url':'https://www.guancha.cn', 'by':'class', 'target':'index-content'},
                    'thepaper.cn':{'url':'https://www.thepaper.cn', 'by':'id', 'target':'masonryContent'},
                    'news.qq.com':{'url':'https://news.qq.com', 'by':'id', 'target':'List', 'rule':'//ul:class=list//li//a'},
                    'youth.cn':{'url':'http://www.youth.cn', 'by':'class', 'target':'youth-left'},
                    'news.cnblogs.com':{'url':'https://news.cnblogs.com', 'by':'id', 'target':'news_list', 'rule':'//div:class=news_block//div:class=content//h2//a'},
                    'ycwb.com':{'url':'http://www.ycwb.com', 'by':'class', 'target':'ywnews'}
                    }

    def __delete__(self):
        self.urls=None

    def getmodules(self):
        return self.urls

    def getbys(self):
        return self.bys

modules=MyModule()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。