从搜索引擎结果页(SERP)中轻松提取关键字。

serpextract-meiqia的Python项目详细描述


https://travis-ci.org/Meiqia/serpextract.png?branch=master

serpextract提供了从搜索引擎结果页(serp)中轻松提取关键字的功能。

这个模块在很大程度上是由Piwik团队的艰苦工作实现的。 具体地说,我们广泛地使用他们的list of search engines

安装

PYPI上的最新版本:

$ pip install serpextract

或最新开发版本(不推荐):

$ pip install -e git://github.com/Parsely/serpextract.git#egg=serpextract

用法

命令行

命令行用法,返回由 逗号并用引号括起来:

$ serpextract "http://www.google.ca/url?sa=t&rct=j&q=ars%20technica"
"Google","ars technica"

您还可以打印出当前在中可用的所有SearchEngineParser的列表 本地缓存通过:

$ serpextract -l

Python

fromserpextractimportget_parser,extract,is_serp,get_all_query_paramsnon_serp_url='http://arstechnica.com/'serp_url=('http://www.google.ca/url?sa=t&rct=j&q=ars%20technica&source=web&cd=1&ved=0CCsQFjAA''&url=http%3A%2F%2Farstechnica.com%2F&ei=pf7RUYvhO4LdyAHf9oGAAw&usg=AFQjCNHA7qjcMXh''j-UX9EqSy26wZNlL9LQ&bvm=bv.48572450,d.aWc')get_all_query_params()# ['key', 'text', 'search_for', 'searchTerm', 'qrs', 'keyword', ...]is_serp(serp_url)# Trueis_serp(non_serp_url)# Falseget_parser(serp_url)# SearchEngineParser(engine_name='Google', keyword_extractor=['q'], link_macro='search?q={k}', charsets=['utf-8'])get_parser(non_serp_url)# Noneextract(serp_url)# ExtractResult(engine_name='Google', keyword=u'ars technica', parser=SearchEngineParser(...))extract(non_serp_url)# None

naive检测

piwik和serpextract使用的搜索引擎解析器的列表远非如此 详尽的。如果希望serpextract尝试猜测给定的引用url是否是serp, 您可以指定use_naive_method=Trueserpextract.is_serpserpextract.extract。 默认情况下,naive方法被禁用。

naive搜索引擎检测尝试在^{tt8}中找到r'\.?search\.'的实例$ 一个网址。如果找到,serpextract将尝试在 按顺序查找以下参数的URL:

_naive_params = ('q', 'query', 'k', 'keyword', 'term',)

如果找到其中一个,则提取关键字并将ExtractResult构造为:

ExtractResult(domain, keyword, None)  # No parser, but engine name and keyword
# Not a recognized search engine by serpextractserp_url='http://search.piccshare.com/search.php?cat=web&channel=main&hl=en&q=test'is_serp(serp_url)# Falseextract(serp_url)# Noneis_serp(serp_url,use_naive_method=True)# Trueextract(serp_url,use_naive_method=True)# ExtractResult(engine_name=u'piccshare', keyword=u'test', parser=None)

自定义分析器

如果您有一个自定义搜索引擎,您希望跟踪当前没有的 受piwik/serpextract支持,您可以创建自己的 serpextract.SearchEngineParser并将其显式传递给 serpextract.is_serpserpextract.extract或添加 到分析器的内部列表。

# Create a parser for PiccSharefromserpextractimportSearchEngineParser,is_serp,extractmy_parser=SearchEngineParser(u'PiccShare',# Engine nameu'q',# Keyword extractoru'/search.php?q={k}',# Link macrou'utf-8')# Charsetserp_url='http://search.piccshare.com/search.php?cat=web&channel=main&hl=en&q=test'is_serp(serp_url)# Falseextract(serp_url)# Noneis_serp(serp_url,parser=my_parser)# Trueextract(serp_url,parser=my_parser)# ExtractResult(engine_name=u'PiccShare', keyword=u'test', parser=SearchEngineParser(engine_name=u'PiccShare', keyword_extractor=[u'q'], link_macro=u'/search.php?q={k}', charsets=[u'utf-8']))

您还可以将自定义解析器永久添加到 serpextract维护,这样就不必再显式地传递解析器 对象到serpextract.is_serpserpextract.extract

fromserpextractimportSearchEngineParser,add_custom_parser,is_serp,extractmy_parser=SearchEngineParser(u'PiccShare',# Engine nameu'q',# Keyword extractoru'/search.php?q={k}',# Link macrou'utf-8')# Charsetadd_custom_parser(u'search.piccshare.com',my_parser)serp_url='http://search.piccshare.com/search.php?cat=web&channel=main&hl=en&q=test'is_serp(serp_url)# Trueextract(serp_url)# ExtractResult(engine_name=u'PiccShare', keyword=u'test', parser=SearchEngineParser(engine_name=u'PiccShare', keyword_extractor=[u'q'], link_macro=u'/search.php?q={k}', charsets=[u'utf-8']))

测试

对于流行的搜索引擎,有一些基本的测试,但还需要更多的测试:

$ pip install -r requirements.txt
$ nosetests

缓存

在内部,此模块缓存OrderedDict表示 Piwik’s list of search engines 存储在serpextract/search_engines.pickle中。这不是要经常改变,所以 模块附带缓存版本。

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

推荐PyPI第三方库


热门话题
NetBeans中的Java Swing滚动窗格   java如何与具有复合键的表建立关系?   Android中读取文件时java数据丢失   java黄瓜场景。embed在ubuntu机器上不工作?   java从spring mvc控制器操作中,我如何获得请求/响应的访问权限?   java减去两个长值   java选择下一个值firebase 安卓   用于起始和结尾连字符的java正则表达式   Java正则表达式解释   java Lifefay freemarker ADT:方法不可用?   java我怎样才能让我的开关盒作用于JFrame?   java在我的场景中使用连接池的理想方式是什么   java我如何接受jsoup的cookies?   java如何将整数数组更改为字符串数组?   java Android操作\u指针\u向上直到剩余触摸移动时才调用   java为什么gradle会出错?   io如何在java中复制/拆分输入流?   java使JButton不可见,但尊重其原始空间   java Spring提交表单获取复选框值不起作用