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

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

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

2、第一步解析地域信息

上面的图为xml中的格式

3、解析XML文件主要代码

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

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

  def get_post_data(self,province=None,city=None):
'''得到每个城市经销商信息'''
city1 = city.encode('utf8')
#将数据转码为utf8
province1 = province.encode('utf8')
ctxt = PyV8.JSContext()
ctxt.enter()
#使用python执行js代码的准备
func = ctxt.eval('''(function(){return (new Date())})''')
#通过代码得到js格式的时间
params = { 'act':'',
'city':city1,
'date':func(),
'name':'',
'pro':province1,
'ty':'',
}
#整理post数据
data = urllib.urlencode(params)
req = urllib2.Request(self.index_url,data)
page =urllib2.urlopen(req).read().decode('utf8')
#通过提交post数据得到相应的结果数据
if page != 'sorry':
#判断结果是否符合需求
dealers = page.split('@@')
i = 0
dealerlist =[]
while i < len(dealers):
dealerinfo = {}
j = 0
dealer = dealers[i].split('|')
dealerinfo[Constant.PROVINCE] = province
dealerinfo[Constant.CITY] = city
dealerinfo[Constant.NAME] = dealer[0]
dealerinfo[Constant.ADDRESS] = dealer[1]
dealerinfo[Constant.SALETEL] = dealer[2]
if len(dealer) ==6:
dealerinfo[Constant.URL] = dealer[3]
elif len(dealer) == 5:
dealerinfo[Constant.URL] = ''
else:
print '###############'
print dealer[0] +' ' +province
print '###############'
dealerlist.append(dealerinfo)
i+=1
self.saver.add(dealerlist)

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

     def deal_dealers_info(self):
areas = self.get_area_list()
for area in areas:
province = area
#得到省份名称
for area_city in areas[area]:
city = area_city
#得到城市名称
self.get_post_data(province,city)
#调用经销商处理方法
self.saver.commit()
#保存excel

长安铃木经销商爬取(解析xml、post提交、python中使用js代码)的更多相关文章

  1. 写一个python 爬虫爬取百度电影并存入mysql中

    目标是利用python爬取百度搜索的电影 在类型 地区 年代各个标签下 电影的名字 评分 和图片连接 以及 电影连接 首先我们先在mysql中建表 create table liubo4( id in ...

  2. 一个爬取Bing每日壁纸的python脚本

    1. 背景 Bing搜索每天的背景图片有些比较适合做桌面,但是有的提供下载有的不提供下载.每天去点击下载又不太方便,所以第一次学习了一下python爬虫怎么写,写的很简单. 2. 相关技术 2.1 P ...

  3. Python使用Scrapy框架爬取数据存入CSV文件(Python爬虫实战4)

    1. Scrapy框架 Scrapy是python下实现爬虫功能的框架,能够将数据解析.数据处理.数据存储合为一体功能的爬虫框架. 2. Scrapy安装 1. 安装依赖包 yum install g ...

  4. Scrapy 爬取BOSS直聘关于Python招聘岗位

    年前的时候想看下招聘Python的岗位有多少,当时考虑目前比较流行的招聘网站就属于boss直聘,所以使用Scrapy来爬取下boss直聘的Python岗位. 1.首先我们创建一个Scrapy 工程 s ...

  5. 16-多线程爬取糗事百科(python+Tread)

    https://www.cnblogs.com/alamZ/p/7414020.html   课件内容 #_*_ coding: utf-8 _*_ ''' Created on 2018年7月17日 ...

  6. Python 爬取 "王者荣耀.英雄壁纸" 过程中的矛和盾

    1. 前言 学习爬虫,最好的方式就是自己编写爬虫程序. 爬取目标网站上的数据,理论上讲是简单的,无非就是分析页面中的资源链接.然后下载.最后保存. 但是在实施过程却会遇到一些阻碍. 很多网站为了阻止爬 ...

  7. node.js 解析xml BOM问题(xmlreader sax.js)

    Email:longsu2010 at yeah dot net 之前写了两篇文章关于node.js解析xml,说的是xmlreader,文章如下 node.js解析xml(xmlreader) no ...

  8. JAVA解析XML文件(DOM,SAX,JDOM,DOM4j附代码实现)

    1.解析XML主要有四种方式 1.DOM方式解析XML(与平台无关,JAVA提供,一次性加载XML文件内容,形成树结构,不适用于大文件) 2.SAX方式解析XML(基于事件驱动,逐条解析,适用于只处理 ...

  9. 解析xml字符串时报“前言中不允许有内容”错误。

    一,问题出现经过: j基于java语言webservic服务端接收客户端 传来的xml字符串用 解析时总报:org.dom4j.DocumentException: Error on line 1 o ...

随机推荐

  1. Android(java)学习笔记106-2:反射机制

    1.反射机制: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为 ...

  2. hdu 4421 2-SAT问题

    思路:我们需要判断是否有满足的a[n],其实也就是对每一个二进制位进行判断,看是否有满足的.那么我们每次取出一个二进制位,这样每一位只有0,1两种状态,就成了比较典型的2-SAT问题了. #inclu ...

  3. 神奇的CSS3选择器

    话说园子里也混迹多年了,但是基本没写过blog,写点基础的,那就从css3选择器开始吧. Css3选择器 先说下,为什么提倡使用选择器. 使用选择器可以将样式与元素直接绑定起来,在样式表中什么样式与什 ...

  4. MyBatis(3.2.3) - Configuring MyBatis using XML, Mappers

    Mapper XML files contain the mapped SQL statements that will be executed by the application using st ...

  5. 在Ubuntu系统中解压rar和zip文件的方法

    大家在以前的windows系统中会存有很多rar和zip格式的压缩文件,Ubuntu系统默认情况下对这些文件的支持不是很好,如果直接用"归档管理器"打开会提示错误,因此今天跟大家分 ...

  6. MYSQL 排行类的相关SQL写法,仅供参考

    SELECT * FROM () )) b

  7. WinForm 实现登录,验证成功,关闭登录界面,显示主界面

    点击登录按钮时: ") { this.DialogResult = DialogResult.OK; this.Close(); } else { MessageBox.Show(" ...

  8. Java 源码学习线路————_先JDK工具包集合_再core包,也就是String、StringBuffer等_Java IO类库

    http://www.iteye.com/topic/1113732 原则网址 Java源码初接触 如果你进行过一年左右的开发,喜欢用eclipse的debug功能.好了,你现在就有阅读源码的技术基础 ...

  9. [C#]线程处理

    线程处理用于使程序能够执行并发处理,同时执行多个操作.C#中有三种线程的使用方法,BackgroundWorker组件.线程池.自己创建使用线程,接下来分别介绍如何使用. 1.使用Background ...

  10. 关于remote访问中的flex端配置问题

    刚刚开始使用blazeds可能会有个疑问.tomcat服务器是必须配置的吗?如果前台后台分开,怎么开发. 其实服务器不是必须配置的,配置了那个服务器,就会在“附加编译参数”加入这样一句: -servi ...