Python查询阿里巴巴关键字排名的方法


Posted in Python onJuly 08, 2015

本文实例讲述了Python查询阿里巴巴关键字排名的方法。分享给大家供大家参考。具体如下:

这里使用python库urllib及pyquery基本东西的应用,实现阿里巴巴关键词排名的查询,其中涉及到urllib代理的设置,pyquery对html文档的解析

1. urllib 基础模块的应用,通过该类获取到url中的html文档信息,内部可以重写代理的获取方法

class ProxyScrapy(object):
  def __init__(self):
    self.proxy_robot = ProxyRobot()
    self.current_proxy = None
    self.cookie = cookielib.CookieJar()
  def __builder_proxy_cookie_opener(self):    
    cookie_handler = urllib2.HTTPCookieProcessor(self.cookie)
    handlers = [cookie_handler]
    if PROXY_ENABLE:
      self.current_proxy = ip_port = self.proxy_robot.get_random_proxy()
      proxy_handler = urllib2.ProxyHandler({'http': ip_port[7:]})
      handlers.append(proxy_handler)
    opener = urllib2.build_opener(*handlers)
    urllib2.install_opener(opener)
    return opener
  def get_html_body(self,url):
    opener = self.__builder_proxy_cookie_opener()
    request=urllib2.Request(url)
    #request.add_header("Accept-Encoding", "gzip,deflate,sdch")
    #request.add_header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
    #request.add_header("Cache-Control", "no-cache")
    #request.add_header("Connection", "keep-alive")
    try:
      response = opener.open(request,timeout=2)
      http_code = response.getcode()
      if http_code == 200:
        if PROXY_ENABLE:
          self.proxy_robot.handle_success_proxy(self.current_proxy)
        html = response.read()
        return html
      else:
        if PROXY_ENABLE:
          self.proxy_robot.handle_double_proxy(self.current_proxy)
        return self.get_html_body(url)
    except Exception as inst:
      print inst,self.current_proxy
      self.proxy_robot.handle_double_proxy(self.current_proxy)
      return self.get_html_body(url)

2. 根据输入的公司名及关键词列表,返回每个关键词的排名

def search_keywords_rank(keyword_company_name, keywords):
  def get_context(url):
    start=clock()
    html=curl.get_html_body(url)
    finish=clock()
    print url,(finish-start)
    d = pq(html)
    items = d("#J-items-content .ls-item")
    items_c = len(items)
    print items_c
    if items_c < 38:
      return get_context(url)
    return items, items_c
  result = OrderedDict()
  for keyword in keywords:
    for page_index in range(1,9):
      u = url % (re.sub('\s+', '_', keyword.strip()), page_index)
      items, items_c = get_context(u)
      b = False
      for item_index in range(0, items_c):
        e=items.eq(item_index).find('.title a')
        p_title = e.text()
        p_url = e.attr('href')
        e=items.eq(item_index).find('.cright h3 .dot-product')
        company_name = e.text()
        company_url = e.attr('href')
        if keyword_company_name in company_url:
          total_index = (page_index-1)*38 +item_index+1+(0 if page_index==1 else 5)
          print 'page %s, index %s, total index %s' % (page_index, item_index+1, total_index)
          b = True
          if keyword not in result:
            result[keyword] = (p_title, p_url, page_index, item_index+1, total_index, u)
          break
      if b:
        break
  return result

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
python创建和删除目录的方法
Apr 29 Python
可能是最全面的 Python 字符串拼接总结【收藏】
Jul 09 Python
Python中一个for循环循环多个变量的示例
Jul 16 Python
python tkinter图形界面代码统计工具
Sep 18 Python
python SVD压缩图像的实现代码
Nov 05 Python
Python中Flask-RESTful编写API接口(小白入门)
Dec 11 Python
浅谈python3 构造函数和析构函数
Mar 12 Python
详解PyQt5信号与槽的几种高级玩法
Mar 24 Python
判断Threading.start新线程是否执行完毕的实例
May 02 Python
解决keras backend 越跑越慢问题
Jun 18 Python
python 调用API接口 获取和解析 Json数据
Sep 28 Python
深入浅析Django MTV模式
Sep 04 Python
浅谈Python中的闭包
Jul 08 #Python
Python中atexit模块的基本使用示例
Jul 08 #Python
python登录豆瓣并发帖的方法
Jul 08 #Python
python发送HTTP请求的方法小结
Jul 08 #Python
python友情链接检查方法
Jul 08 #Python
Python抓取百度查询结果的方法
Jul 08 #Python
Python抓取淘宝下拉框关键词的方法
Jul 08 #Python
You might like
PHP中source #N问题的解决方法
2014/01/27 PHP
php mysql 封装类实例代码
2016/09/18 PHP
javascript动画对象支持加速、减速、缓入、缓出的实现代码
2012/09/30 Javascript
探讨javascript是不是面向对象的语言
2013/11/21 Javascript
javaScript中两个等于号和三个等于号之间的区别介绍
2014/06/27 Javascript
jquery模拟alert的弹窗插件
2015/07/31 Javascript
JavaScript中removeChild 方法开发示例代码
2016/08/15 Javascript
jQuery替换节点用法示例(使用replaceWith方法)
2016/09/08 Javascript
Vue组件BootPage实现简单的分页功能
2016/09/12 Javascript
浅析script标签中的defer与async属性
2016/11/30 Javascript
js实现将json数组显示前台table中
2017/01/10 Javascript
判断颜色是否合法的正则表达式(详解)
2017/05/03 Javascript
Vue框架中正确引入JS库的方法介绍
2017/07/30 Javascript
浅谈JS 数字和字符串之间相互转化的纠纷
2017/10/20 Javascript
vscode配置vue下的es6规范自动格式化详解
2019/03/20 Javascript
Bootstrap实现前端登录页面带验证码功能完整示例
2020/03/26 Javascript
浅析JavaScript预编译和暗示全局变量
2020/09/03 Javascript
python 动态获取当前运行的类名和函数名的方法
2014/04/15 Python
python 拷贝特定后缀名文件,并保留原始目录结构的实例
2018/04/27 Python
django写用户登录判定并跳转制定页面的实例
2019/08/21 Python
基于pytorch 预训练的词向量用法详解
2020/01/06 Python
小 200 行 Python 代码制作一个换脸程序
2020/05/12 Python
python eventlet绿化和patch原理
2020/11/21 Python
详解如何解决H5开发使用wx.hideMenuItems无效果不生效
2021/01/20 HTML / CSS
英国计算机产品零售商:Novatech(定制个人电脑、笔记本电脑、工作站和服务器)
2018/01/28 全球购物
80年代复古T恤:TruffleShuffle
2018/07/02 全球购物
Lacoste(法国鳄鱼)加拿大官网:以标志性的POLO衫而闻名
2019/05/15 全球购物
优秀干部获奖感言
2014/01/31 职场文书
培训班开班仪式主持词
2014/03/28 职场文书
产品质量保证书
2014/04/29 职场文书
医疗专业毕业生求职信
2014/08/28 职场文书
2014年党员学习“三严三实”思想汇报
2014/09/15 职场文书
酒店人事专员岗位职责
2015/04/07 职场文书
Go 在 MongoDB 中常用查询与修改的操作
2021/05/07 Golang
Java移除无效括号的方法实现
2021/08/07 Java/Android
javascript之Object.assign()的痛点分析
2022/03/03 Javascript