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

相关文章

来自专栏pangguoming

Spring Boot集成JasperReports生成PDF文档

由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲...

1.2K7
来自专栏张善友的专栏

Miguel de Icaza 细说 Mix 07大会上的Silverlight和DLR

Mono之父Miguel de Icaza 详细报道微软Mix 07大会上的Silverlight和DLR ,上面还谈到了Mono and Silverligh...

2697
来自专栏张善友的专栏

Silverlight + Model-View-ViewModel (MVVM)

     早在2005年,John Gossman写了一篇关于Model-View-ViewModel模式的博文,这种模式被他所在的微软的项目组用来创建Expr...

2938
来自专栏java 成神之路

使用 NIO 实现 echo 服务器

4537
来自专栏魂祭心

原 canvas绘制clock

4034
来自专栏Golang语言社区

【Golang语言社区】GO1.9 map并发安全测试

var m sync.Map //全局 func maintest() { // 第一个 YongHuomap := make(map[st...

4688
来自专栏张善友的专栏

Mix 10 上的asp.net mvc 2的相关Session

Beyond File | New Company: From Cheesy Sample to Social Platform Scott Hansel...

2537
来自专栏跟着阿笨一起玩NET

c#实现打印功能

2632
来自专栏陈仁松博客

ASP.NET Core 'Microsoft.Win32.Registry' 错误修复

今天在发布Asp.net Core应用到Azure的时候出现错误InvalidOperationException: Cannot find compilati...

4818
来自专栏一个爱瞎折腾的程序猿

sqlserver使用存储过程跟踪SQL

USE [master] GO /****** Object: StoredProcedure [dbo].[sp_perfworkload_trace_s...

2000

扫码关注云+社区