分析web的小框架。

webparser的Python项目详细描述


说明

分析web的小框架。

crawler.py模块为web浏览器提供基类,它可以

  • 使用Selenium WebDriver;打开网页
  • 运行一组解析器;
  • 处理Selenium异常;
  • 记录成功和记录失败。

用法

重要

要使用远程webdriver,不要忘记启动selenium服务器。

$ java -jar selenium-server-standalone.jar

示例

创建包含分析器的模块:

#-------[ amazon.py ]---------------------------------------------------fromwebparser.crawlerimportCrawlerclassAmazonBook(Crawler):def__init__(self,url=None):self.parsers={self.parse_title,self.parse_cover_url}super().__init__(url)defparse_title(self):title=self.webdriver.find_element_by_xpath("//span[@id='productTitle'][1]").get_attribute('innerHTML')self.data['title']=titleiftitle:returnNonereturn'Title not found.'defparse_cover_url(self):cover_url=self.webdriver.find_element_by_xpath("//img[@id='imgBlkFront'][1]").get_attribute('src')self.data['cover_url']=cover_urlifcover_url:returnNonereturn'Cover url not found.'#-----------------------------------------------------------------------

创建解析器:

# Example script 01:#-------[ parser.py ]---------------------------------------------------fromwebparser.amazonimportAmazonBookamazon_book=AmazonBook('http://...')# Load webpage and parse itprint(amazon_book.data['title'])# Print parsed book titleprint(amazon_book.data['cover_url'])# Print parsed url title#-----------------------------------------------------------------------# Example script 02:#-------[ parser.py ]---------------------------------------------------fromwebparser.amazonimportAmazonBookamazon_book=AmazonBook()# Create objectamazon_book.get('http://...')# Load webpageamazonbook.parse_title()# Parse book titleprint(amazon_book.data['title'])# Print parsed book title#-----------------------------------------------------------------------

指南

网络驱动程序

更改新对象的默认Webdriver

Crawler.webdriver=NoneCrawler.webdriver_default=lambda:Crawler.init_webdriver_chrome_remote(ip,port)

更改选定类的新对象的默认Webdriver

AmazonBook.webdriver=NoneAmazonBook.webdriver_default=lambda:Crawler.init_webdriver_chrome_remote(ip,port)

更改选定对象的WebDriver

myobject.webdriver=Crawler.init_webdriver_chrome_remote(ip,port)

儿童课程

解析器的实现应该放在子类中。请参阅示例部分中的子类示例。

子类应具有构造函数

def__init__(self,url=None):self.parsers={self.parse_title}# Set of routine parserssuper().__init__(url)# Parent class constructor

子类应该有解析器

defparse_title(self):# Recommend to begin name with 'parser_''''Parses book title.'''# Docstring is important for logstitle=self.webdriver.find_element_by_xpath("//span[@id='productTitle'][1]").get_attribute('src')# Recommend to retrieve data with xpathself.data['title']=title# Data should be stored in data[]iftitle:returnNone# If success, return Nonereturn'Title not found.'# If failed, return error message

建议为每种网页类型创建单独的类, 每个网站都有单独的模块(有几个类)。 示例:模块“amazon.py”,包含类“amazonbook”、“amazoncupons”。

记录

级别警告

  • 记录失败消息。

级别信息

  • 记录有关失败的异常消息;
  • 记录成功消息。

在脚本中设置日志级别:

importlogginglogging.basicConfig(level=logging.INFO)

许可证

这个程序是免费软件;你可以重新发布和/或修改它 根据

mit许可证

兹免费准许任何人取得副本 本软件和相关文档文件(“软件”)的 在软件中不受限制,包括但不限于 使用、复制、修改、合并、发布、分发、再授权和/或出售 软件的副本,并允许使用软件的人员 在满足以下条件的情况下,可以这样做:

上述版权公告及本许可公告须包括在内 在软件的所有副本或大部分中。

软件按“原样”提供,不作任何形式的保证 或暗示,包括但不限于适销性保证, 适合特定目的和不侵权。无论如何 作者或版权所有者应对任何索赔、损害或其他 责任,无论是在合同诉讼、侵权诉讼或其他诉讼中, 不属于或与软件、使用或其他交易有关 在软件里。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
eclipse如何使用getter和setter调试java代码?   java如何使用HashMap作为LinkedHashSet   安卓 java。lang.RuntimeException:无法启动活动组件信息{..}JAVAlang.NullPointerException   使用二进制堆和比较器的Remove()存在循环问题   java在两个数组中查找匹配的数字   Maven exec可以工作,但java jar不能   java SQLite数据库未显示在文件资源管理器中   java Android Studio下一页按钮不工作   java为什么启用某些异常的调试要慢得多?   java如何在测试中注入bean的属性源   java如何预加载Android inapp计费购买   java使用CSS选择器在特定实例上单击按钮   java在Spring Boot中使用生成的ID持久化一个OneToMany实体   作用域如果我在java方法中声明一个变量,该变量是否也可以被从声明该变量的方法调用的任何方法访问?   本机JNIC代码中的java Openssl同步   java没有规则使目标“external/obpermissionjar/javalib/obpermissionjarPro20160628_1.0.9”为..所需。。?   java计算人口密度:初学者指南   java如何检查书签是否包含表?   java在Spring应用程序中设置时区