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 subprocess 杀掉全部派生的子进程方法
Jan 16 Python
Python基于identicon库创建类似Github上用的头像功能
Sep 25 Python
python中subprocess批量执行linux命令
Apr 27 Python
PyCharm的设置方法和第一个Python程序的建立
Jan 16 Python
在Pycharm中将pyinstaller加入External Tools的方法
Jan 16 Python
详解numpy的argmax的具体使用
May 27 Python
将tensorflow模型打包成PB文件及PB文件读取方式
Jan 23 Python
TensorFlow2.X使用图片制作简单的数据集训练模型
Apr 08 Python
Python pathlib模块使用方法及实例解析
Oct 05 Python
python爬取代理ip的示例
Dec 18 Python
python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解
Jan 26 Python
python中封包建立过程实例
Feb 18 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取进制余数函数代码
2012/01/19 PHP
php读取远程gzip压缩网页的方法
2014/12/29 PHP
php实现搜索一维数组元素并删除二维数组对应元素的方法
2015/07/06 PHP
反射调用private方法实践(php、java)
2015/12/21 PHP
thinkPHP5.0框架安装教程
2017/03/25 PHP
Yii框架参数化查询中IN查询只能查询一个的解决方法
2017/05/20 PHP
PHP后期静态绑定之self::限制实例分析
2018/12/21 PHP
Javascript 类与静态类的实现
2010/04/01 Javascript
Jquery实现图片放大镜效果的思路及代码(自写)
2013/10/18 Javascript
showModalDialog在谷歌浏览器下会返回Null的解决方法
2013/11/27 Javascript
原生js编写基于面向对象的分页组件
2016/12/05 Javascript
AngularJs 最新验证手机号码的实例,成功测试通过
2017/11/26 Javascript
vue-router 源码之实现一个简单的 vue-router
2018/07/02 Javascript
老生常谈JS中的继承及实现代码
2018/07/06 Javascript
vue中通过使用$attrs实现组件之间的数据传递功能
2019/09/01 Javascript
layui table 获取分页 limit的方法
2019/09/20 Javascript
Vue中错误图片的处理的实现代码
2019/11/07 Javascript
vue中使用极验验证码的方法(附demo)
2019/12/04 Javascript
vue实现div可拖动位置也可改变盒子大小的原理
2020/09/16 Javascript
[03:24]DOTA2超级联赛专访hao 大翻盘就是逆袭
2013/05/24 DOTA
[28:07]完美世界DOTA2联赛PWL S3 Phoenix vs INK ICE 第二场 12.13
2020/12/17 DOTA
Python动态加载模块的3种方法
2014/11/22 Python
在Linux下调试Python代码的各种方法
2015/04/17 Python
图文讲解选择排序算法的原理及在Python中的实现
2016/05/04 Python
Django URL传递参数的方法总结
2016/08/28 Python
Python解析命令行读取参数--argparse模块使用方法
2018/01/23 Python
Python进程,多进程,获取进程id,给子进程传递参数操作示例
2019/10/11 Python
利用python Selenium实现自动登陆京东签到领金币功能
2019/10/31 Python
python实现从尾到头打印单链表操作示例
2020/02/22 Python
中国包裹转运寄送国际服务:Famiboat
2019/07/24 全球购物
请解释接口的显式实现有什么意义
2012/05/26 面试题
高分子材料个人求职信范文
2013/09/25 职场文书
好的自荐信包括什么内容
2013/11/07 职场文书
小学岗位竞聘方案
2014/01/22 职场文书
文明青少年标兵事迹材料
2014/01/28 职场文书
优秀学生干部主要事迹材料
2015/11/04 职场文书