分析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)
版权所有
版权所有(c)2017 Mikhail Ananyevskiy
许可证
这个程序是免费软件;你可以重新发布和/或修改它 根据
mit许可证
兹免费准许任何人取得副本 本软件和相关文档文件(“软件”)的 在软件中不受限制,包括但不限于 使用、复制、修改、合并、发布、分发、再授权和/或出售 软件的副本,并允许使用软件的人员 在满足以下条件的情况下,可以这样做:
上述版权公告及本许可公告须包括在内 在软件的所有副本或大部分中。
软件按“原样”提供,不作任何形式的保证 或暗示,包括但不限于适销性保证, 适合特定目的和不侵权。无论如何 作者或版权所有者应对任何索赔、损害或其他 责任,无论是在合同诉讼、侵权诉讼或其他诉讼中, 不属于或与软件、使用或其他交易有关 在软件里。