#!/usr/bin/env python
#coding:utf-
import urllib2,sys,re,os,string reload(sys);
sys.setdefaultencoding('utf8'); #url="http://www.dianping.com/search/category/1/20/g122" def httpCrawler(url):
#first page
content = httpRequest(url)
#other page
#for pageNo in range(,):
# content = httpRequest(url)
shops=parseHtml(content)
getAllPages(shops)
unpackOneShop()
#saveData(shops) 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 =
req = urllib2.Request(url,None,req_header)
resp = urllib2.urlopen(req,None,req_timeout)
html = resp.read().decode('utf-8')
#print html
finally:
if resp:
resp.close()
return html def parseHtml(html):
content = None
#shops = re.findall(r'<li class="" >(.+?)<\li>',html,re.S)
shops = re.findall(r'<div class="shop-list J_shop-list shop-all-list" id="shop-all-list">\n<ul>.*?</ul>\n</div>',html,re.S)
return shops def getAllPages(shops):
#total pages
getEachShop(shops)
print "################one page done." global t_OneShop
t_OneShop=['']** def getEachShop(shops):
global t_OneShop
t_OneShop=['']**
t_start=
shops_string=''.join(shops) i=
t_start = shops_string.find(r'<li class="" >')
all_end = shops_string.rfind('</li>')
while i<= and t_start and all_end:
t_start = shops_string.find(r'<li class="" >',t_start)
t_end = shops_string.find('</li>',t_start,all_end)
#print "t_start:",t_start
#print "t_end:",t_end
t_OneShop[i] = shops_string[t_start:t_end]
#print t_OneShop[i] t_start=t_end
i=i+ def unpackOneShop():
global t_OneShop f = open('./zhubao/shops.csv', 'w')
f.write('\xEF\xBB\xBF')
f.write('名称,地址,人均消费,,,')
f.write('\r\n')
f.close()
for i in range(,):
#print t_OneShop[i] f = open('./zhubao/shops.csv', 'ab+') ShopName = re.findall(r'<h4>(.*?)</h4>',t_OneShop[i])
#ShopDistrict =
address = re.findall(r'<span class="addr">(.*?)</span>',t_OneShop[i])
mean_price = re.findall(r'mean-price" target="_blank" >(.*?)</span>',t_OneShop[i],re.S)
averageComsumption = re.findall(r'<b>(.*?)</b>',''.join(mean_price),re.S) print 'mean_price:',mean_price
print 'average::',averageComsumption
ShopName.extend(address)
ShopName.extend(averageComsumption) print (','.join(ShopName)).replace('\n',''),'\r\n'
f.write((''.join(','.join(ShopName)).replace('\n','')))
f.write('\r\n')
f.close() #iprovince =
#city =
#adminDistrict = def saveData(data):
if not os.path.exists('./zhubao'):
os.mkdir(r'./zhubao')
f = open('./zhubao/zhubao_shops.csv', 'wb')
f.write(data)
f.close() if __name__ == '__main__':
url="http://www.dianping.com/search/category/1/20/g122"
httpCrawler(url) '''
python2. 没有urllib.request
多线程
gevent
爬虫系统基本的结构:
.网络请求;
最简单的工具就是urllib、urllib2。这两个工具可以实现基本的下载功能,如果进阶想要异步可以使用多线程,如果想效率更高采用非阻塞方案tornado和curl可以实现非阻塞的下载。
.抓取结构化数据;
要想在页面中找到新链接需要对页面解析和对url排重,正则和DOM都可以实现这个功能,看自己熟悉哪一种。
正则感觉速度较快一些,DOM相对较慢并且复杂一点,如果只是为了要url正则可以解决,如果还想要页面中其他的结构或者内容DOM比较方便。
url的排重两小可以用memcache或者redis,量大就要用到bloomfilter。
.数据存储;
抓的少怎么存都行,抓的多并且要方便读取那就要好好设计了,用哈希分布存储在RDBMS上或者直接存在HBase上都要看你的数据量和具体需求。
'''

shops的更多相关文章

  1. (hdu 6024) Building Shops

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6024 Problem Description HDU’s n classrooms are on a ...

  2. APP-SERVICE-SDK:setStorageSync:fail;at page/near/pages/shops/shops page lifeCycleMethod onUnload function

    APP-SERVICE-SDK:setStorageSync:fail;at page/near/pages/shops/shops page lifeCycleMethod onUnload fun ...

  3. HDU6024 Building Shops 2017-05-07 18:33 30人阅读 评论(0) 收藏

    Building Shops                                                             Time Limit: 2000/1000 MS ...

  4. Building Shops

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submissi ...

  5. HDU6024:Building Shops(简单DP)

    Building Shops Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) ...

  6. hdu6024 Building Shops(区间dp)

    https://cn.vjudge.net/problem/HDU-6024 分开考虑某一点种与不种,最后取二者的最小值. dp[i][1] = min(dp[i-1][0], dp[i-1][1]) ...

  7. HDU 6024 Building Shops

    $dp$. $dp[i]$表示到$i$位置,且$i$位置建立了的最小花费,那么$dp[i] = min(dp[k]+cost[i+1][k-1])$,$k$是上一个建的位置.最后枚举$dp[i]$,加 ...

  8. 【HDU6024】Building Shops

    题意 有n个教室排成一排,每个教室都有一个坐标,现在,小Q想建一些糖果商店,在这n个教室里面.总的花费有两部分,在教室i建一个糖果屋需要花费ci,对于没有任何糖果屋的P,需要的花费为这个教室到它左边有 ...

  9. HDU6024:Building Shops(DP)

    传送门 题意 在一条直线上有n个教室,现在要设置糖果店,使得最后成本最小,满足以下两个条件: 1.若该点为糖果店,费用为cost[i]; 2.若不是,则为loc[i]-最近的糖果店的loc 分析 dp ...

随机推荐

  1. [转]MEF程序设计指南

    <MEF程序设计指南>博文汇总 在MEF之前,人们已经提出了许多依赖注入框架来解决应用的扩展性问题,比如OSGI 实现以Spring 等等.在 Microsoft 的平台上,.NET Fr ...

  2. 模板:KD-Tree

    KD-Tree,用来解决多维空间中的问题,其实就是优化暴力(逃 一般cdq能做的它都能做,而且...既然是优化暴力,那就学习一下了 对与几个n维点,我们将它每一维分割,建立一颗二叉树,方便我们搜索剪枝 ...

  3. JavaSE_01_Exception类

    1.1 异常概念 指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止. 在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象.Java ...

  4. AdaBoost笔记之代码

    最近要做二分类问题,先Mark一下知识点和代码,参考:Opencv2.4.9源码分析——Boosting   以下内容全部转自此文 一 原理 二 opencv源码 1.先看构建Boosting的参数: ...

  5. Chapter 2 栈和队列

    Chapter 2 栈和队列 1-   栈 当n个元素以某顺序进栈,可在任意时刻出栈,元素排列的顺序N满足Catalan()规则: 常用操作: 1   栈的初始化和定义: 2   元素x进栈: 3   ...

  6. --1.plsql中学习job

    --1.plsql中学习job --学习job --建表 create table test_job(para_date date); commit; insert into test_job val ...

  7. kafka例子程序

    //生产端 产生数据 /** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor li ...

  8. shell中各种括号的作用详解()、(())、[]、[[]]、{}

    一.小括号,圆括号() 1.单小括号 () ①命令组.括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用.括号中多个命令之间用分号隔开,最后一个命令可以没有分号, ...

  9. 巧用tar命令

    tar命令可以对文件进行归档.它最初设计是用来将数据存储在磁带上.tar可以将多个文件和文件夹保存为单个文件,同时还能保留所有的文件属性,如所有者.权限等.由tar创建的文件通常称为Tarball.下 ...

  10. android 数据绑定(1)Ativity、Fragment、Item绑定数据源

    1.简介 官方文档:  https://developer.android.com/topic/libraries/data-binding 官方示例: https://github.com/andr ...