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. 使用JS制作一个鼠标可拖的DIV(二)——限制区域移动

    这次是要对上一篇的内容进行扩展. 由于需要对可拖动的 DIV 进行一个区域范围的限制,所以要给于一个容器,让可拖动的 DIV 元素不能逃出该容器的大小范围. 一.思路 1.在外层增加一个 DIV 容器 ...

  2. 分享一个java线程专栏

    专栏 : java线程基础 转载自 http://blog.csdn.net/column/details/yinwenjiethread.html 专栏内容: 1.线程基础:线程(1)--操作系统和 ...

  3. Oracle 经典语法(二)

    --提示:工资 = 薪金 + 佣金 1. 找出EMP表中的姓名(ENAME)第三个字母是A 的员工姓名.SELECT ENAME FROM SCOTT.EMP WHERE ENAME LIKE '__ ...

  4. CMD相关命令初探

    今天想起来对个人写得一个自动启动绿色版MySQL服务器端的批处理文件,进行外观美化,使自己在启动时,能得心旷神怡一点.在网上学习了一点CMD批处理的知识.在此保留,以待后查. @      @:不显示 ...

  5. 转:iOS基于MVC的项目重构总结

    转:http://www.cocoachina.com/ios/20160519/16346.html 关于MVC的争论 关于MVC的争论已经有很多,对此我的观点是:对于iOS开发中的绝大部分场景来说 ...

  6. 微信 redirect_uri参数错误 正确的处理

    如果您若成功将微信搭建了到自己的服务器中的情况下,进行网页授权时出现如下图 解决方案: 开发->接口权限->找到类目为"网页服务->网页账号" 点击修改,注意,此 ...

  7. MyEclipse8.5集成Tomcat7时的启动错误:Exception in thread “main” java.lang.NoClassDefFoundError org/apache/commons/logging/LogFactory

    今天,安装Tomcat7.0.21后,单独用D:\apache-tomcat-7.0.21\bin\startup.bat启动web服务正常.但 在MyEclipse8.5中集成配置Tomcat7后, ...

  8. IOS Delegate & protocal

    总结一下: delegate是一个方式,程序组成单元之间分工的一种协调思想 protocal 这个东西不能单独说,要与它相关的两个主要东西一起说,一个是 委托者 通常是VIEW, 一个是被委托者 通常 ...

  9. 重叠I/O之可等待的重叠I/O【系列一】

    一 什么是异步I/O 同步I/O和异步I/O的关键不同就是在发出I/O请求后,线程是否会阻塞.当线程发出一个设备I/O请求的时候,线程会被挂起来,直到设备完成I/O请求为止,这称之为同步I/O.而对于 ...

  10. PYTHON:HTTP头设置工具(以附件名为例)

    import oss2 # 用户授权 auth = oss2.Auth('accessId', 'accessKey')# oss bucket bucket = oss2.Bucket(auth, ...