getshops

#!/usr/bin/env python
#encoding=utf-8
import urllib2,sys,re,os
#url="http://www.dianping.com/search/category/1/20/g122"

def httpCrawler(url):
    content = httpRequest(url)
    info=parseHtml(content)
    saveData(info)

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 = 5
        req = urllib2.Request(url,None,req_header)
        resp = urllib2.urlopen(req,None,req_timeout)
        html = resp.read()
        print html
    finally:
        if resp:
            resp.close()
    return html

def parseHtml(html):
    content = None
    pattern = ‘<title>([^<]*?)</title>‘
    temp = re.findall(pattern, html)
    if temp:
        content = temp[0]
    ‘‘‘
    province =
    city =
    adminDistrict =
    businessDistrict =
    businessName =
    address =
    averageComsumption =
    ‘‘‘
    return content    

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.6 没有urllib.request
多线程
gevent
爬虫系统基本的结构:
1.网络请求;
最简单的工具就是urllib、urllib2。这两个工具可以实现基本的下载功能,如果进阶想要异步可以使用多线程,如果想效率更高采用非阻塞方案tornado和curl可以实现非阻塞的下载。
2.抓取结构化数据;
要想在页面中找到新链接需要对页面解析和对url排重,正则和DOM都可以实现这个功能,看自己熟悉哪一种。
正则感觉速度较快一些,DOM相对较慢并且复杂一点,如果只是为了要url正则可以解决,如果还想要页面中其他的结构或者内容DOM比较方便。
url的排重两小可以用memcache或者redis,量大就要用到bloomfilter。
3.数据存储;
抓的少怎么存都行,抓的多并且要方便读取那就要好好设计了,用哈希分布存储在RDBMS上或者直接存在HBase上都要看你的数据量和具体需求。
‘‘‘
#!/usr/bin/env python
#encoding=utf-8
import urllib2,sys,re,os
#url="http://www.dianping.com/search/category/1/20/g122"

def httpCrawler(url):
    content = httpRequest(url)
    info=parseHtml(content)
    saveData(info)

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 = 5
        req = urllib2.Request(url,None,req_header)
        resp = urllib2.urlopen(req,None,req_timeout)
        html = resp.read()
        print html
    finally:
        if resp:
            resp.close()
    return html

def parseHtml(html):
    content = None
    pattern = ‘<title>([^<]*?)</title>‘
    temp = re.findall(pattern, html)
    if temp:
        content = temp[0]
    ‘‘‘
    province =
    city =
    adminDistrict =
    businessDistrict =
    businessName =
    address =
    averageComsumption =
    ‘‘‘
    return content    

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.6 没有urllib.request
多线程
gevent
爬虫系统基本的结构:
1.网络请求;
最简单的工具就是urllib、urllib2。这两个工具可以实现基本的下载功能,如果进阶想要异步可以使用多线程,如果想效率更高采用非阻塞方案tornado和curl可以实现非阻塞的下载。
2.抓取结构化数据;
要想在页面中找到新链接需要对页面解析和对url排重,正则和DOM都可以实现这个功能,看自己熟悉哪一种。
正则感觉速度较快一些,DOM相对较慢并且复杂一点,如果只是为了要url正则可以解决,如果还想要页面中其他的结构或者内容DOM比较方便。
url的排重两小可以用memcache或者redis,量大就要用到bloomfilter。
3.数据存储;
抓的少怎么存都行,抓的多并且要方便读取那就要好好设计了,用哈希分布存储在RDBMS上或者直接存在HBase上都要看你的数据量和具体需求。
‘‘‘
#!/usr/bin/env python
#encoding=utf-8
import urllib2,sys,re,os
#url="http://www.dianping.com/search/category/1/20/g122"

def httpCrawler(url):
    content = httpRequest(url)
    info=parseHtml(content)
    saveData(info)

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 = 5
        req = urllib2.Request(url,None,req_header)
        resp = urllib2.urlopen(req,None,req_timeout)
        html = resp.read()
        print html
    finally:
        if resp:
            resp.close()
    return html

def parseHtml(html):
    content = None
    pattern = ‘<title>([^<]*?)</title>‘
    temp = re.findall(pattern, html)
    if temp:
        content = temp[0]
    ‘‘‘
    province =
    city =
    adminDistrict =
    businessDistrict =
    businessName =
    address =
    averageComsumption =
    ‘‘‘
    return content    

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.6 没有urllib.request
多线程
gevent
爬虫系统基本的结构:
1.网络请求;
最简单的工具就是urllib、urllib2。这两个工具可以实现基本的下载功能,如果进阶想要异步可以使用多线程,如果想效率更高采用非阻塞方案tornado和curl可以实现非阻塞的下载。
2.抓取结构化数据;
要想在页面中找到新链接需要对页面解析和对url排重,正则和DOM都可以实现这个功能,看自己熟悉哪一种。
正则感觉速度较快一些,DOM相对较慢并且复杂一点,如果只是为了要url正则可以解决,如果还想要页面中其他的结构或者内容DOM比较方便。
url的排重两小可以用memcache或者redis,量大就要用到bloomfilter。
3.数据存储;
抓的少怎么存都行,抓的多并且要方便读取那就要好好设计了,用哈希分布存储在RDBMS上或者直接存在HBase上都要看你的数据量和具体需求。
‘‘‘
时间: 2024-09-30 20:55:42

getshops的相关文章

yii实现级联下拉菜单的方法

1.模版中加入如下代码: ? 1 2 3 4 5 6 7 8 <?php  echo $form->dropDownList($model, 'src_type_id', OrderSrc::options(), array(  <span style="white-space:pre"> </span>'id' => 'task-order-src-id',  ));  echo $form->dropDownList($model,

Angular--页面间切换及传值的四种方法

著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:Ye Huang链接:https://www.zhihu.com/question/33565135/answer/69651500来源:知乎 1. 基于ui-router的页面跳转传参(1) 在AngularJS的app.js中用ui-router定义路由,比如现在有两个页面,一个页面(producers.html)放置了多个producers,点击其中一个目标,页面跳转到对应的producer页,同时将producer

AngularJS - Passing data between pages

You need to create a service to be able to share data between controllers. app.factory('myService', function() { var savedData = {} function set(data) { savedData = data; } function get() { return savedData; } return { set: set, get: get } }); In you

AngularJS进阶 八 实现页面跳转并进行参数传递

angularjs实现页面跳转并进行参数传递 注:请点击此处进行充电! Angular页面传参有多种办法,我在此列举4种最常见的: 1. 基于ui-router的页面跳转传参 (1) 在AngularJS的app.js中用ui-router定义路由,比如现在有两个页面,一个页面(producers.html)放置了多个producers,点击其中一个目标,页面跳转到对应的producer页,同时将producerId这个参数传过去. .state('producers', { url: '/pr

(十六)硅谷外卖-使用 vuex 管理状态

一.下载vuex npm install --save vuex 二.定义state store/state.js export default { latitude: 40.10038, // 纬度 longitude: 116.36867, // 经度 address: {}, // 地址信息对象 categorys: [], // 分类数组 shops: [], } 三.定义mutation-types store/mutation-types.js export const RECEIV