#!/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. Linux进程间通信总结

    刚请完婚假,请假期间做了些技术总结,其中一个就是Linux进程间通信方式的总结. Linux提供了多种进程间通信的方式,列举如下: PIPE(管道) FIFO(先进先出,也称为有名管道) domain ...

  2. JavaMail收发邮件的一般流程与主要方法

    1.Properties属性类 Properties p = new Properties(); p.put(key, value); key -| mail.smtp.host -| mail.sm ...

  3. ECharts的使用相关参考---转

    ECharts图表组件初级入门之(一):如何将ECharts引入至项目中的几种方式 http://www.stepday.com/topic/?801 ECharts图表初级入门篇:如何配置EChar ...

  4. iOS 纯代码适配iPhone6,6+

    链接地址:http://blog.csdn.net/codywangziham01/article/details/37658399 转自:http://www.maxiaoguo.com/cloth ...

  5. 经典union的使用

    一个用户下广告位  某一天有收入和支出  有支出不一定有收入  有收入不一定有支出  下例为按用户查询 sanhao 下的信息 支出如下: 收入如下: 按天进行查询,例如查询: 得到结果如下: 使用一 ...

  6. Asp.net Role manager tutorial

    It is very useful in .net we can user framework provided role manager, and easily configure in Web.C ...

  7. 在Spring Boot启动后执行指定代码

    在开发时有时候需要在整个应用开始运行时执行一些特定代码,比如初始化环境,准备测试数据等等. 在Spring中可以通过ApplicationListener来实现相关的功能,不过在配合Spring Bo ...

  8. perl5 第二章 简单变量

    第二章 简单变量  by flamephoenix 一.整型 二.浮点数 三.字符串 基本上,简单变量就是一个数据单元,这个单元可以是数字或字符串.一.整型 1.整型   PERL最常用的简单变量,由 ...

  9. kinect for windows - 手势识别之一,C++实现

    用C++来实现手势识别是比较困难的,所以在这个例子,我们只实现了握拳和松手的手势识别,其他没有实现. 先上个效果图: 在这个程序里,我们打开了kinect的RGB流,深度流,骨骼数据流和手势识别流.其 ...

  10. vs linq to db template

    linq to db template 支持sqlite. mysql .db2. accress. oracle. Firebird等多种数据库以linq方式操作数据. NuGet NuGet 是 ...