1、网站地址http://www.baicmotor.com/dealer.php
2、使用firefox查看后发现,此网站的信息未使用json数据,而是简单那的html页面而已
3、使用pyquery库中的PyQuery进行html的解析
页面样式:
代码:
1 def get_dealer_info(self): 2 """获取经销商信息""" 3 css_select = 'html body div.box div.news_wrapper div.main div.news_list div.service_main div table tr ' 4 #使用火狐浏览器中的自动复制css路径得到需要位置数据 5 page = urllib2.urlopen(self.entry_url).read() 6 #读取页面 7 page = page.replace('<br />','&') 8 page = page.replace('<br/>','&') 9 #由于页面中的电话信息中使用了br换行,所以在抓取的时候会产生问题 10 #问题是:如果取得一对标签中的数据,中包含<br/>,会出现值得到br之前的数据,而后的数据将得不到,原因个人认为是解析html是会任务/>结尾标准 11 d = pq(page) 12 #使用PyQuery解析页面,此处pq=PyQuery,因为from pyquery import PyQuery as pq 13 dealer_list = [] 14 #创建列表用于提交到存储方法 15 for dealer_div in d(css_select): 16 #此处定位tr,具体数据在此标签中的td标签内 17 p = dealer_div.findall('td') 18 #此处p就是一个tr标签内,全部td数据的集合 19 dealer = {} 20 #此处的字典用于存储一个店铺的信息用于提交到列表中 21 if len(p)==1: 22 #此处多哥if判断是用于对数据进行处理,因为一些格式不符合最终数据的要求,需要剔除,这个快的代码按需求而定 23 print '@' 24 elif len(p)==6 : 25 strp = p[0].text.strip() 26 dealer[Constant.CITY] = p[1].text.strip() 27 strc = p[2].text.strip() 28 29 dealer[Constant.PROVINCE] = p[0].text.strip() 30 dealer[Constant.CITY] = p[1].text.strip() 31 dealer[Constant.NAME] = p[2].text.strip() 32 dealer[Constant.ADDRESSTYPE] = p[3].text.strip() 33 dealer[Constant.ADDRESS] = p[4].text.strip() 34 dealer[Constant.TELPHONE] = p[5].text.strip() 35 dealer_list.append(dealer) 36 elif len(p)==5: 37 if p[0].text.strip() != u'省份': 38 dealer[Constant.PROVINCE] = strp 39 dealer[Constant.CITY] = p[0].text.strip() 40 dealer[Constant.NAME] = p[1].text.strip() 41 dealer[Constant.ADDRESSTYPE] = p[2].text.strip() 42 dealer[Constant.ADDRESS] = p[3].text.strip() 43 dealer[Constant.TELPHONE] = p[4].text.strip() 44 dealer_list.append(dealer) 45 elif len(p)==3: 46 print '@@' 47 print '@@@' 48 self.saver.add(dealer_list) 49 self.saver.commit()
4、最终代码执行成功,得到了相应数据并存入excel中