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

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

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

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

2、第一步解析地域信息

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

上面的图为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

 

 

你可能感兴趣的:(python)