Python3爬取汽车目标经销商数据

本文采用Python3进行语法编写,Python3与Python2中的函数会有所不同,但是相差不大,具体的问题可以百度找到,因有朋友在做汽车方面的业务,因此需要一些网络数据进行支撑,一个个找会非常的繁琐,因此之前弄了些爬虫数据。这里进行其中一部分爬虫的代码共享。

爬虫效果如下:

首先要定义一些常量

# !/usr/bin/env python

# -*- coding:utf-8 -*-
# by Zason_Zhang
import urllib,urllib.request,json

from pyquery import PyQuery as pq

class Constant():

    """常量"""

    NAME = 'name'

    DIANMIAN = 'dianmian'

    ADDRESS = 'address'

    TELEPHONE = 'tel'

进行爬虫爬取

###目的爬取目标用户电话
class AutoDealerCrawler():


    def __init__(self):

        self.saver = Saver() # 保存

        self.index_url = ''

        self.entry_url = self.index_url + '/dmzs.aspx?classid=38'

        self.province_url = self.entry_url +'&city='

    def get_province_list(self):

        """省份""" 

        page =  urllib.request.urlopen(self.entry_url).read()#读页

        d = pq(page)

        #print d

        return[(province_option.text, province_option.get('value')) \

                for province_option in d('select#ddlCity option')]

    def get_name_list(self,province_id):

        '''省店'''

        css_selector = 'html body form#form1 div#body div.body div#conter div.right div.col1 ul.a01 li span a'

        page =  urllib.request.urlopen(self.province_url + province_id).read()

        d = pq(page)

        #print '2222' %d

        return [(shop.text,shop.get('href')) \

                    for shop in d(css_selector)]

    

    def get_dealer_info_one_province(self, province, shop_url):

        """省份经销商信息"""

        css_selector = 'html body div#body div.body div#conter div.right div.col9a'

        css_selectorname = 'html body div#body div.body div#conter div.right div.col9wz2'

        page =  urllib.request.urlopen(self.index_url +'/' + shop_url).read()

        d = pq(page)

        dealer_info_list = []

        

        for dealername in d(css_selectorname):

            print  (dealername.text)

            dealer_infoname = {}

            dealer_infoname[Constant.NAME] = dealername.text

            dealer_info_list.append(dealer_infoname)

      

        for dealer_dt in d(css_selector):

            p = dealer_dt.findall('p')#获取标签p

            if len(p) >= 3:

                dealer_info = {}

                print (p[0].text[3:].strip())

                print (p[1].text[3:].strip())

                print (p[2].text[3:].strip())

                dealer_info[Constant.DIANMIAN] = p[0].text[3:].strip()

                dealer_info[Constant.TELEPHONE] = p[1].text[3:].strip()

                dealer_info[Constant.ADDRESS] = p[2].text[3:].strip()

                

                dealer_info_list.append(dealer_info)

            else:

                self.error_logger.log(u'城市链接错误:%s' % shop_url)

        temp_a =  dealer_info_list[0]

        temp_b =  dealer_info_list[1]

        temp_a.update(temp_b)

        #print temp_a

        dealer_info_list_new = []

        dealer_info_list_new.append(temp_a)

        self.saver.add(province, dealer_info_list_new)

    def get_all_dealer_info(self):

        """经销商信息生成程序"""

        for province,province_id in self.get_province_list():

            if province_id =='':

                print ('')

            else:

                for shop,shop_url in self.get_name_list(province_id):

       

                   self.get_dealer_info_one_province(province, shop_url)

        self.saver.commit()

数据存储

class Saver():

    """保存excel"""

    def __init__(self):

        import xlwt

        self.count = 1

        self.book = xlwt.Workbook()

        self.book_name = u'信息'

        self.sheet = self.book.add_sheet(self.book_name)

        self.write_header()

    def write_header(self):

        self.sheet.write(0, 0, u'编号')

        self.sheet.write(0, 1, u'省份')

        self.sheet.write(0, 2, u'店门')

        self.sheet.write(0, 3, u'公司名称')

        self.sheet.write(0, 4, u'联系电话')

        self.sheet.write(0, 5, u'地址')

    def add(self, province, dealer_info_list):

        for dealer in dealer_info_list:

            self.sheet.write(self.count, 0, self.count)

            self.sheet.write(self.count, 1, province)

            print (self.count)

            print (province)

            #print dealer[Constant.DIANMIAN]

            self.sheet.write(self.count, 2, dealer[Constant.DIANMIAN])

            self.sheet.write(self.count, 3, dealer[Constant.NAME])

            self.sheet.write(self.count, 4, dealer[Constant.TELEPHONE])

            self.sheet.write(self.count, 5, dealer[Constant.ADDRESS])

            self.count += 1

            

    def commit(self):

        self.book.save(self.book_name + '.xls')

        print (self.book_name + u'已保存')       

if __name__ == '__main__':

    crawler = AutoDealerCrawler()

    crawler.get_all_dealer_info()

原文发布于微信公众号 - 大数据挖掘DT数据分析(datadw)

原文发表时间:2016-08-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android 开发者

Android 8.1 开发者预览版 —— 为 ML 机器学习做好准备的 Oreo 升级版

2104
来自专栏AI科技大本营的专栏

精选Python开源项目Top10!

【导读】过去一个月里,我们对近 250 个 Python 开源项目进行了排名,并挑选出热度前 10 的项目。这份清单的平均 github star 数量高达 1...

1092
来自专栏PHP在线

NoSQL数据库的分布式算法

原文出处: highlyscalable.wordpress.com 译文出处:juliashine 系 统的可扩展性是推动NoSQL运动发展的的主要...

3335
来自专栏高性能服务器开发

C++ 高性能服务器网络框架设计细节(节选)

这篇文章我们将介绍服务器的开发,并从多个方面探究如何开发一款高性能高并发的服务器程序。需要注意的是一般大型服务器,其复杂程度在于其业务,而不是在于其代码工程的基...

2733
来自专栏ImportSource

NoSQL分布式模型实现之一:Single Server

翻译内容: NoSQL Distilled 第四章 Distribution Models 作者简介: ? 本节摘要: 第四章我们主要说的是NoSQL运...

25610
来自专栏Linyb极客之路

同步IO、异步IO、阻塞IO、非阻塞IO之间的联系与区别

同步IO、异步IO、阻塞IO、非阻塞IO,这几个词常见于各种各样的与网络相关的文章之中,往往不同上下文中它们的意思是不一样的,以致于我在很长一段时间对此感到困惑...

1102
来自专栏SDNLAB

ONOS集群管理架构分析

前言: 众所周知,ONOS是一款面向运营商的开源SDN网络操作系统,主要面向服务提供商和企业骨干网等重要的生产环境。为了满足对可靠性、灵活度的需求,ONOS采取...

30510
来自专栏Crossin的编程教室

【每日一坑 6】 查找文件内容

Hello 大家好,我终于又来挖坑了。 上次的坑好像反响不是很好,论坛上只有两份解答。其实这题难度不大,不用什么特殊的函数来解决,就是字符串、队列的各种操作,可...

2677

异步数据存储

在过去几年工作中,对NoSQL数据存储使用经验以及随着NoSQL成为主要的数据存储和检索方式,让我洞察到应用程序必经的发展方向。至少对于基于Web和基于云的应用...

19411
来自专栏微信公众号:Java团长

分布式与集群的区别

简单说,分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。

971

扫码关注云+社区