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

相关文章

来自专栏Greenplum

Greenplum使用TPC-H测试过程及结果

TPC-H 基准测试是由 TPC-D(由 TPC 组织于 1994 年指定的标准,用于决策支持系统方面的测试基准)发展而来的.TPC-H 用 3N...

1396
来自专栏吉浦迅科技

DAY51:阅读Warp Shuffle Functions

__shfl_sync, __shfl_up_sync, __shfl_down_sync, and __shfl_xor_sync exchange a va...

762
来自专栏Java帮帮-微信公众号-技术文章全总结

solr使用教程二【面试+工作】

6.3高亮显示 我们经常使用搜索引擎,比如在baidu 搜索 java ,会出现如下结果,结果中与关键字匹配的地方是红色显示与其他内容区别开来。 solr 默认...

3587
来自专栏函数式编程语言及工具

Akka(20): Stream:异步运算,压力缓冲-Async, batching backpressure and buffering

   akka-stream原则上是一种推式(push-model)的数据流。push-model和pull-model的区别在于它们解决问题倾向性:push模...

2227
来自专栏逸鹏说道

大型.NET ERP系统的20条数据库设计规范

数据库设计规范是个技术含量相对低的话题,只需要对标准和规范的坚持即可做到。当系统越来越庞大,严格控制数据库的设计人员,并且有一份规范书供执行参考。在程序框架中,...

3156
来自专栏cnblogs

vue原来可以这样上手

       今儿与一群友讨论vue相关问题让我思量极深,1.我们是否在争对性解决问题或者说是帮助别人;2.我们是否在炫耀自己的技能。以下是被戏剧化的对白: ...

1919
来自专栏我是攻城师

Apache Pig如何通过自定义UDF查询数据库(五)

3634
来自专栏IMWeb前端团队

那些年我们踩过的坑

事件背景 有一天leader给程序员cover分配了一个需求,cover一看,需求很简单嘛,就是在页面异步拉取数据展示就OK了,于是就和cgi同事阿翔对接了一下...

22410
来自专栏腾讯IVWEB团队的专栏

那些年我们踩过的坑

没有一个程序员一开始就能写出高抽象,复用性高的代码,和一世人流流长,总会爱上几个人渣一样,程序员总会遇到各式各样的坑,关键是遇到坑之后是视若无睹还是努力学习改进...

6010
来自专栏月牙寂

[以太坊源代码分析] I.区块和交易,合约和虚拟机

本文转载来源自:http://blog.csdn.net/teaspring/article/details/75389151 感谢原作者teaspring...

4345

扫描关注云+社区