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中处理字符串之isdigit()方法的使用
May 18 Python
Python 功能和特点(新手必学)
Dec 30 Python
理解Python中的With语句
Mar 18 Python
Python实现优先级队列结构的方法详解
Jun 02 Python
总结网络IO模型与select模型的Python实例讲解
Jun 27 Python
Python爬取APP下载链接的实现方法
Sep 30 Python
python正则表达式的使用
Jun 12 Python
详解python上传文件和字符到PHP服务器
Nov 24 Python
python逐行读写txt文件的实例讲解
Apr 03 Python
Python调用钉钉自定义机器人的实现
Jan 03 Python
Python库skimage绘制二值图像代码实例
Apr 10 Python
重构Python代码的六个实例
Nov 25 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
html中select语句读取mysql表中内容
2006/10/09 PHP
浅谈apache和nginx的rewrite的区别
2013/02/22 PHP
PHP PDOStatement::getColumnMeta讲解
2019/02/01 PHP
jquery 学习笔记一
2010/04/07 Javascript
解决IE下select标签innerHTML插入option的BUG(兼容IE,FF,Opera,Chrome,Safari)
2010/05/13 Javascript
在jQuery ajax中按钮button和submit的区别分析
2012/10/07 Javascript
jQuery中:submit选择器用法实例
2015/01/03 Javascript
CascadeView级联组件实现思路详解(分离思想和单链表)
2016/04/12 Javascript
使用jQuery Rotare实现微信大转盘抽奖功能
2016/06/20 Javascript
JavaScript ES5标准中新增的Array方法
2016/06/28 Javascript
JavaScript制作简单分页插件
2016/09/11 Javascript
JavaScript学习总结(一) ECMAScript、BOM、DOM(核心、浏览器对象模型与文档对象模型)
2018/01/07 Javascript
详解nodeJs文件系统(fs)与流(stream)
2018/01/24 NodeJs
Vue2.0实现调用摄像头进行拍照功能 exif.js实现图片上传功能
2018/04/28 Javascript
Vue仿支付宝支付功能
2018/05/25 Javascript
详解微信小程序调起键盘性能优化
2018/07/24 Javascript
在Layui 的表格模板中,实现layer父页面和子页面传值交互的方法
2019/09/10 Javascript
微信小程序实现点击按钮后修改颜色
2019/12/05 Javascript
vue中父子组件传值,解决钩子函数mounted只运行一次的操作
2020/07/27 Javascript
[01:13]2015国际邀请赛线下观战现场
2015/08/08 DOTA
[01:13:08]2018DOTA2亚洲邀请赛4.6 淘汰赛 mineski vs LGD 第二场
2018/04/10 DOTA
[40:04]Secret vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
Python简单定义与使用二叉树示例
2018/05/11 Python
Python 实现子类获取父类的类成员方法
2019/01/11 Python
Python操作excel的方法总结(xlrd、xlwt、openpyxl)
2019/09/02 Python
面向新手解析python Beautiful Soup基本用法
2020/07/11 Python
css3进阶之less实现星空动画的示例代码
2019/09/10 HTML / CSS
基于ccs3的timeline时间线实现方法
2020/04/30 HTML / CSS
canvas绘制视频封面的方法
2018/02/05 HTML / CSS
Under Armour安德玛意大利官网:美国高端运动科技品牌
2020/01/16 全球购物
《故乡》教学反思
2014/04/10 职场文书
办公室文员工作自我鉴定
2014/09/19 职场文书
教师查摆问题及整改措施
2014/10/11 职场文书
教师个人查摆剖析材料
2014/10/14 职场文书
党政领导班子群众路线对照检查材料
2014/10/26 职场文书
Unicode中的CJK(中日韩统一表意文字)字符小结
2021/12/06 HTML / CSS