#!/usr/bin/env python                         
#coding:utf-8
import urllib2,re,sys,os,types                
#from bs4 import BeautifulSoup

reload(sys);
sys.setdefaultencoding('gbk');              
        
province="上海"
city="上海"
fileHeader='\xEF\xBB\xBF'                     
colums='省直辖市^城市^行政区^商圈^名称^地址^联系人^联系电话^URL^公司介绍^'

def getCompany(method):
    for page in range(1,5+1):  
        url1="http://product.china-pub.com/cache/rank3/newbook/%s_%s.html"%(method,page)
        print "\n##################:",url1
        httpCrawler(url1,page,method)

def httpCrawler(url,page,method):
    content = httpRequest(url)
    #<tr logr='j_2_27359935228167_20019655228034_3'>
    List=re.findall(r'<td height="17" style="overflow: hidden;" colspan="5">(.*?)<a href="(.*?)" target="_blank">(.*?)</a>',content,re.S)
    no=len(List)
    print no
    method1=method.replace("\/","")
    for i in range(0,no):#0 ~ no-1
    url=List[i][1]
    name=List[i][2]
    name1=name.replace("/","").replace(u"+微信营销与运营:策略、方法、技巧与实践+微信营销解密:移动互联网时代的营销革命","")
    print "\ndownload one page:",List[i][1],"\n",List[i][2]
    if not os.path.exists('./%s'%method1):
        os.mkdir(r'./%s'%method1)
    content = httpRequest(url)
#    if (page-1)*20+i+1 != 82:
        open(u'%s/%s.%s'%(method1,(page-1)*20+i+1,name1+'.html'),'w+').write(content)
    print "ok"

def httpRequest(url):
    #try:
    html = None
    req_header = {
        'User-Agent':'Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0',
        'Accept':'text/html;q=0.9,*/*;q=0.8',
        #'Accept-Language':'en-US,en;q=0.5',
        #'Accept-Encoding':'gzip',
        #'Host':'j3.s2.dpfile.com',
        #'Connection':'keep-alive'
        #'Referer':'http://www.baidu.com'
    }
    req_timeout = 15
    req = urllib2.Request(url,None,req_header)
    resp = urllib2.urlopen(req,None,req_timeout)
    html = resp.read()#.decode('gbk').encode('gbk')
    print "resp:",resp
    #print html
    #finally:
    #    if resp:
    #        resp.close()
    return html

def writeHeader(fileheader,colums):
    if not os.path.exists('./58'):
        os.mkdir(r'./58')
    f = open('./58/daikuan.csv', 'w')
    f.write(fileheader)
    f.write(colums)
    #f.write('\r\n')
    f.close()

array=(
'day\/rank_day_7_51',
'day\/rank_day_30_51',
'day\/rank_day_90_51',
'month\/rank_month_7_51',
'month\/rank_month_6_51',
'month\/rank_month_5_51',
'month\/rank_month_4_51',
'month\/rank_month_3_51',
'month\/rank_month_2_51',
'month\/rank_month_1_51',
'day\/rank_day_7_02',
'day\/rank_day_30_02',
'day\/rank_day_90_02',
'month\/rank_month_7_02',
'month\/rank_month_6_02',
'month\/rank_month_5_02',
'month\/rank_month_4_02',
'month\/rank_month_3_02',
'month\/rank_month_2_02',
'month\/rank_month_1_02',
'day\/rank_day_7_31',
'day\/rank_day_30_31',
'day\/rank_day_90_31',
'month\/rank_month_7_31',
'month\/rank_month_6_31',
'month\/rank_month_5_31',
'month\/rank_month_4_31',
'month\/rank_month_3_31',
'month\/rank_month_2_31',
'month\/rank_month_1_31',
'day\/rank_day_7_57',
'day\/rank_day_30_57',
'day\/rank_day_90_57',
'month\/rank_month_7_57',
'month\/rank_month_6_57',
'month\/rank_month_5_57',
'month\/rank_month_4_57',
'month\/rank_month_3_57',
'month\/rank_month_2_57',
'month\/rank_month_1_57',
'day\/rank_day_7_47',
'day\/rank_day_30_47',
'day\/rank_day_90_47',
'month\/rank_month_7_47',
'month\/rank_month_6_47',
'month\/rank_month_5_47',
'month\/rank_month_4_47',
'month\/rank_month_3_47',
'month\/rank_month_2_47',
'month\/rank_month_1_47',
'day\/rank_day_7_46',
'day\/rank_day_30_46',
'day\/rank_day_90_46',
'month\/rank_month_7_46',
'month\/rank_month_6_46',
'month\/rank_month_5_46',
'month\/rank_month_4_46',
'month\/rank_month_3_46',
'month\/rank_month_2_46',
'month\/rank_month_1_46',
'day\/rank_day_7_60',
'day\/rank_day_30_60',
'day\/rank_day_90_60',
'month\/rank_month_7_60',
'month\/rank_month_6_60',
'month\/rank_month_5_60',
'month\/rank_month_4_60',
'month\/rank_month_3_60',
'month\/rank_month_2_60',
'month\/rank_month_1_60',
'day\/rank_day_7_52',
'day\/rank_day_30_52',
'day\/rank_day_90_52',
'month\/rank_month_7_52',
'month\/rank_month_6_52',
'month\/rank_month_5_52',
'month\/rank_month_4_52',
'month\/rank_month_3_52',
'month\/rank_month_2_52',
'month\/rank_month_1_52',
'day\/rank_day_7_59',
'day\/rank_day_30_59',
'day\/rank_day_90_59',
'month\/rank_month_7_59',
'month\/rank_month_6_59',
'month\/rank_month_5_59',
'month\/rank_month_4_59',
'month\/rank_month_3_59',
'month\/rank_month_2_59',
'month\/rank_month_1_59'
'day\/rank_day_7_28',
'day\/rank_day_30_28',
'day\/rank_day_90_28',
'month\/rank_month_7_28',
'month\/rank_month_6_28',
'month\/rank_month_5_28',
'month\/rank_month_4_28',
'month\/rank_month_3_28',
'month\/rank_month_2_28',
'month\/rank_month_1_28',
)

if __name__ == '__main__':
    #writeHeader(fileHeader,colums)
    print len(array)
    for i in range(0,len(array)):
        getCompany(array[i])

china-pub的更多相关文章

  1. Python攻关之Django(一)

    课程简介: Django流程介绍 Django url Django view Django models Django template Django form Django admin (后台数据 ...

  2. django 模型

    一.project 与app之间的关系 1个project中可包含多个app eg:包含两个app的project的结构

  3. 转(NLP必读)

    如果你刚接触自然语言处理并对她感兴趣,最好读几本这方面的书籍,除了能让你知道自然语言处理各个领域是干什么的外,还能培养一下NLP的感觉.以下四本书是我读研期间阅读和接触过的,如果您还有好书推荐,欢迎补 ...

  4. django之数据库orm

    一.数据库的配置 1 django默认支持sqlite,mysql, oracle,postgresql数据库. <1>sqlite django默认使用sqlite的数据库,默认自带sq ...

  5. Django详细介绍

    课程简介: Django流程介绍 Django url Django view Django models Django template Django form Django admin (后台数据 ...

  6. c++学习书籍推荐《C标准库(英文版)》下载

    <C标准库(英文版)>是由世界级C语言专家编写的C标准库经典著作,影响了几代程序员. <C标准库(英文版)>集中讨论了C标准库,全面介绍了ANSI/ISO C语言标准的所有库函 ...

  7. C++学习书籍推荐《The C++ Standard Library 2nd》下载

    百度云及其他网盘下载地址:点我 编辑推荐 经典C++教程十年新版再现,众多C++高手和读者好评如潮 畅销全球.经久不衰的C++ STL鸿篇巨著 C++程序员案头必 备的STL参考手册 全面涵盖C++1 ...

  8. 小程序-demo:天气预报

    ylbtech-小程序-demo:天气预报 1.返回顶部 1.app.js //app.js App({ //系统事件 onLaunch: function () {//小程序初始化事件 var th ...

  9. China Azure中部署Kubernetes(K8S)集群

    目前China Azure还不支持容器服务(ACS),使用名称"az acs create --orchestrator-type Kubernetes -g zymtest -n kube ...

  10. Redis的Pub/Sub客户端实现

    前言   在学习T-io框架,从写一个Redis客户端开始一文中,已经简单介绍了Redis客户端的实现思路,并且基础架构已经搭建完成,只不过支持的命令不全,不过后期在加命令就会很简单了.本篇就要实现P ...

随机推荐

  1. HDU 11488 Hyper Prefix Sets (字符串-Trie树)

    H Hyper Prefix Sets Prefix goodness of a set string is length of longest common prefix*number of str ...

  2. Android UI设计

    Android UI设计--PopupWindow显示位置设置 摘要: 当点击某个按钮并弹出PopupWindow时,PopupWindow左下角默认与按钮对齐,但是如果PopupWindow是下图的 ...

  3. Android Intent的几种使用方法全面总结

    Intent应该算是Android中特有的东西.你能够在Intent中指定程序要运行的动作(比方:view,edit,dial),以及程序运行到该动作时所须要的资料.都指定好后,仅仅要调用startA ...

  4. SQL Server使用LIKE运算符进行匹配查询

    在查询的过程中,如果遇到不能明确的指明查询的限定条件时,就会用到LIKE运算符进行模式匹配查询.在查询时可以使用如下几个通配符: %:包含零个或多个字符的任意字符串 —(下划线):任何单个字符 []: ...

  5. 关于MATLAB中any和all的个人理解

    any: any=1,有一个元素是1,即可: any=0,全部元素为0,即可. all: all=1,全部元素是1,即可: all=0,有一个元素是0,即可. ALL True if all elem ...

  6. 【iOS】Mapkit的使用:地图显示、定位、大头针、气泡等

    转自:http://blog.csdn.net/dolacmeng/article/details/46594839 以前做项目用高德地图SDK,需要注册账号和AppID,然后下载SDK集成到项目中, ...

  7. java 在方法中新建线程,传参和加锁详解

    在实际开发中,往往在基本两三种创建线程的方法之外,还用到一个简单的创建线程调用方法的情况,代码如下: public void deleteRedisData(RedisKey redisKey){ n ...

  8. Laravel5 学习与使用(一)

    2015-07-04 (1)  安装Laravel框架 ① 安装前的准备工作 使用Apache24 + PHP 5.6 + MySQL 开发环境完成PHP网站开发,所以Laravel的安装是建立在以上 ...

  9. uva 11134 - Fabled Rooks(问题转换+优先队列)

    题目链接:uva 11134 - Fabled Rooks 题目大意:给出n,表示要在n*n的矩阵上放置n个车,并且保证第i辆车在第i个区间上,每个区间给出左上角和右小角的坐标.另要求任意两个车之间不 ...

  10. SumoLogic

    SumoLogic>>>Loggly. https://diyunpeng.loggly.com/setup MonitorWare http://www.monitorware.c ...