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实现从web抓取文档的方法
Sep 26 Python
在Python的Flask框架中使用日期和时间的教程
Apr 21 Python
numpy中的高维数组转置实例
Apr 17 Python
Python实现两个list求交集,并集,差集的方法示例
Aug 02 Python
python 字典 setdefault()和get()方法比较详解
Aug 07 Python
Python API自动化框架总结
Nov 12 Python
Python enumerate内置库用法解析
Feb 24 Python
pandas读取csv文件提示不存在的解决方法及原因分析
Apr 21 Python
解决pytorch 交叉熵损失输出为负数的问题
Jul 07 Python
python闭包与引用以及需要注意的陷阱
Sep 18 Python
如何实现一个python函数装饰器(Decorator)
Oct 12 Python
几款好用的python工具库(小结)
Oct 20 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生成的html meta和link标记在body标签里 顶部有个空行
2010/05/18 PHP
PHP静态调用非静态方法的应用分析
2013/05/02 PHP
PHP5全版本绕过open_basedir读文件脚本漏洞详细介绍
2015/01/20 PHP
PHP实现可自定义样式的分页类
2016/03/29 PHP
Yii实现的多级联动下拉菜单
2016/07/13 PHP
PHP实现数组根据某个字段进行水平合并,横向合并案例分析
2019/10/08 PHP
PHP文件操作简单介绍及函数汇总
2020/12/11 PHP
基于jQuery UI CSS Framework开发Widget的经验
2010/08/21 Javascript
javascript 内存回收机制理解
2011/01/17 Javascript
extjs实现选择多表自定义查询功能 前台部分(ext源码)
2011/12/20 Javascript
自己实现string的substring方法 人民币小写转大写,数字反转,正则优化
2012/09/02 Javascript
通过JS来动态的修改url,实现对url的增删查改
2014/09/01 Javascript
js用Date对象的setDate()函数对日期进行加减操作
2014/09/18 Javascript
javascript比较两个日期相差天数的方法
2015/07/24 Javascript
js实现的Easy Tabs选项卡用法实例
2015/09/06 Javascript
Vue.js:使用Vue-Router 2实现路由功能介绍
2017/02/22 Javascript
详解vue.js下引入百度地图jsApi的两种方法
2018/07/27 Javascript
微信小程序实现购物车代码实例详解
2019/08/29 Javascript
[01:02:34]TFT vs VGJ.T Supermajor 败者组 BO3 第二场 6.5
2018/06/06 DOTA
[05:09]DOTA2-DPC中国联赛2月22日Recap集锦
2021/03/11 DOTA
python发送邮件接收邮件示例分享
2014/01/21 Python
Python队列的定义与使用方法示例
2017/06/24 Python
python opencv对图像进行旋转且不裁剪图片的实现方法
2019/07/09 Python
Python小白不正确的使用类变量实例
2020/05/29 Python
python线性插值解析
2020/07/05 Python
利用CSS3实现动态的二级三级菜单效果实例源码
2017/01/04 HTML / CSS
Nip + Fab官网:英国美容品牌
2019/08/26 全球购物
写好自荐信要注意的问题
2013/11/10 职场文书
司机的工作范围及职责
2013/11/13 职场文书
司法助理专业自荐书
2014/06/13 职场文书
2014物价局群众路线对照检查材料思想汇报
2014/09/21 职场文书
三严三实对照检查材料范文
2014/09/23 职场文书
关于有小孩的离婚协议书
2014/10/26 职场文书
2016年社区植树节活动总结
2016/03/16 职场文书
MySQL获取所有分类的前N条记录
2021/05/07 MySQL
cypress测试本地web应用
2022/06/01 Javascript