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 条评论
登录 后参与评论

相关文章

来自专栏各种机器学习基础算法

标准的经营类业务流程

一、标准的经营类业务流程是这样的,想来一个么? 1.特性开发环境:自动隔一段时间如5分钟从branches分支持同步svn代码。无需申请 2.主干测试...

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

微信、陌陌等著名IM软件设计架构详解

https://blog.csdn.net/justinjing0612/article/details/38322353

4133
来自专栏Crossin的编程教室

微信机器人进化指南

听说阿尔法狗又要挑战柯杰了。时至今日,人工智能不断刷新我们对这个世界的理解。或许再过不久,你真的不知道跟你在网上聊天的对象还是不是一个“人”,也不知道自己的工作...

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

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

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

6134
来自专栏PHP在线

NoSQL数据库的分布式算法

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

3338
来自专栏SDNLAB

ONOS集群管理架构分析

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

34410
来自专栏Android 开发者

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

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

分布式与集群的区别

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

1431
来自专栏敏捷开发&项目管理

项目从VS2010 升 VS2012 遇到的代表性问题及解决

最近公司要把项目从使用VS2010 转成VS2012,开始以为是个很简单的事情,后来发现有点头疼。 现在问题解决了,发现主要有以下3个方面的问题 第三方组件,对...

3619
来自专栏皮振伟的专栏

[linux][memory]ksm/uksm的调优和优化尝试

前言: 在前文《[linux][memory]KSM技术分析》中,分析了KSM技术的基本实现原理。这里再总结一下使用ksm/uksm遇到的几个问题,并附加上作者...

57512

扫码关注云+社区

领取腾讯云代金券