• 长安铃木经销商爬取(解析xml、post提交、python中使用js代码)


    1、通过火狐浏览器,查找大长安铃木官网中关于经销商的信息主要在两个网页中

    http://www.changansuzuki.com/khfw/xml/pro.xml  地域信息

    http://www.changansuzuki.com/khfw/sqcx.php  查询经销商具体信息

    2、第一步解析地域信息

    上面的图为xml中的格式

    3、解析XML文件主要代码

     1     def get_area_list(self):
     2         """获取地域省份和城市名称字典"""
     3         page = urllib2.urlopen(self.xml_url).read()
     4         area_list = {}
     5         root = ElementTree.fromstring(page)
     6         #读取xml格式文本
     7         for onep in root:
     8             province =  onep.get('name')
     9             #父标签中的name数据(province中)
    10             city_list = []
    11             for onec in onep:
    12                 #子标签中的name数据(city中)
    13                 city = onec.get('name')
    14                 city_list.append(city)
    15             area_list[province] = city_list
    16             #返回一个省份与城市关系的字典,即:{省份名称:[城市名称1,城市名称2,···]}
    17         return area_list

    3、得到每个城市经销商信息主要代码

     1  def get_post_data(self,province=None,city=None):
     2         '''得到每个城市经销商信息'''
     3         city1 = city.encode('utf8')
     4         #将数据转码为utf8
     5         province1 = province.encode('utf8')
     6         ctxt = PyV8.JSContext()
     7         ctxt.enter()
     8         #使用python执行js代码的准备
     9         func = ctxt.eval('''(function(){return (new Date())})''')
    10         #通过代码得到js格式的时间
    11         params = {  'act':'3',
    12                     'city':city1,
    13                     'date':func(),
    14                     'name':'',
    15                     'pro':province1,
    16                     'ty':'2',
    17                   }
    18         #整理post数据
    19         data = urllib.urlencode(params)
    20         req = urllib2.Request(self.index_url,data)
    21         page =urllib2.urlopen(req).read().decode('utf8')
    22         #通过提交post数据得到相应的结果数据
    23         if page != 'sorry':
    24             #判断结果是否符合需求
    25             dealers = page.split('@@')
    26             i = 0
    27             dealerlist =[]    
    28             while i < len(dealers):
    29                 dealerinfo = {}
    30                 j = 0
    31                 dealer = dealers[i].split('|')
    32                 dealerinfo[Constant.PROVINCE] = province
    33                 dealerinfo[Constant.CITY] = city
    34                 dealerinfo[Constant.NAME] = dealer[0]
    35                 dealerinfo[Constant.ADDRESS] = dealer[1]
    36                 dealerinfo[Constant.SALETEL] = dealer[2]
    37                 if len(dealer) ==6:
    38                     dealerinfo[Constant.URL] = dealer[3]
    39                 elif len(dealer) == 5:
    40                     dealerinfo[Constant.URL] = ''
    41                 else:
    42                     print '###############'
    43                     print dealer[0] +' ' +province
    44                     print '###############'
    45                 dealerlist.append(dealerinfo)
    46                 i+=1
    47             self.saver.add(dealerlist)

    4、最终整合方法实现功能

     1     def deal_dealers_info(self):
     2         areas = self.get_area_list()    
     3         for area in areas:
     4             province = area
     5             #得到省份名称
     6             for area_city in areas[area]:
     7                     city = area_city
     8                     #得到城市名称
     9                     self.get_post_data(province,city)
    10                     #调用经销商处理方法
    11         self.saver.commit()
    12         #保存excel
  • 相关阅读:
    能力修炼:底层、体系化与开放性闭环能力
    实现可扩展代码的四步曲
    碎碎念五六
    代码可扩展示例:元素构建
    碎碎念五七
    如何做编程知识投资及减少知识失效的影响
    如何写一份好的吸引人的简历
    构造与使用分离:命中内容高亮及合并的展示问题解决实现
    自助对公回单机的部分问题解决方法
    lodop一种导致自定义纸张无效现象的错误写法
  • 原文地址:https://www.cnblogs.com/victroy/p/3440345.html
Copyright © 2020-2023  润新知