长安铃木经销商爬取(解析xml、post提交、python中使用js代码)
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代码)的更多相关文章
- 写一个python 爬虫爬取百度电影并存入mysql中
目标是利用python爬取百度搜索的电影 在类型 地区 年代各个标签下 电影的名字 评分 和图片连接 以及 电影连接 首先我们先在mysql中建表 create table liubo4( id in ...
- 一个爬取Bing每日壁纸的python脚本
1. 背景 Bing搜索每天的背景图片有些比较适合做桌面,但是有的提供下载有的不提供下载.每天去点击下载又不太方便,所以第一次学习了一下python爬虫怎么写,写的很简单. 2. 相关技术 2.1 P ...
- Python使用Scrapy框架爬取数据存入CSV文件(Python爬虫实战4)
1. Scrapy框架 Scrapy是python下实现爬虫功能的框架,能够将数据解析.数据处理.数据存储合为一体功能的爬虫框架. 2. Scrapy安装 1. 安装依赖包 yum install g ...
- Scrapy 爬取BOSS直聘关于Python招聘岗位
年前的时候想看下招聘Python的岗位有多少,当时考虑目前比较流行的招聘网站就属于boss直聘,所以使用Scrapy来爬取下boss直聘的Python岗位. 1.首先我们创建一个Scrapy 工程 s ...
- 16-多线程爬取糗事百科(python+Tread)
https://www.cnblogs.com/alamZ/p/7414020.html 课件内容 #_*_ coding: utf-8 _*_ ''' Created on 2018年7月17日 ...
- Python 爬取 "王者荣耀.英雄壁纸" 过程中的矛和盾
1. 前言 学习爬虫,最好的方式就是自己编写爬虫程序. 爬取目标网站上的数据,理论上讲是简单的,无非就是分析页面中的资源链接.然后下载.最后保存. 但是在实施过程却会遇到一些阻碍. 很多网站为了阻止爬 ...
- node.js 解析xml BOM问题(xmlreader sax.js)
Email:longsu2010 at yeah dot net 之前写了两篇文章关于node.js解析xml,说的是xmlreader,文章如下 node.js解析xml(xmlreader) no ...
- JAVA解析XML文件(DOM,SAX,JDOM,DOM4j附代码实现)
1.解析XML主要有四种方式 1.DOM方式解析XML(与平台无关,JAVA提供,一次性加载XML文件内容,形成树结构,不适用于大文件) 2.SAX方式解析XML(基于事件驱动,逐条解析,适用于只处理 ...
- 解析xml字符串时报“前言中不允许有内容”错误。
一,问题出现经过: j基于java语言webservic服务端接收客户端 传来的xml字符串用 解析时总报:org.dom4j.DocumentException: Error on line 1 o ...
随机推荐
- Android(java)学习笔记115:Android InputMethodManager输入法简介
正文 一.结构 public final class InputMethodManager extends Object Java.lang.Object android.view.inputmeth ...
- iOS XMPP(1)
关键词: 即时通讯技术 协议 了解xmpp的目的,工作原理 XMPP是基于XML的协议,传送的是XML格式流;IP地址:联网时电脑的唯一标识 Mac地址:不联网时电脑的唯一标志; OSI七层 ...
- 笔记——js 数组
JS阅读笔记--数组[Array] 最近在看zepto源码,里面用到了很多基础知识,借此机会又把基础知识复习和整理了一遍,算是温故而知新吧.先从引用类型Array写起吧 1. length属性 代码: ...
- git 在windows上 生成ssh公钥
今天上传代码到服务器时,报如下错误: 上网搜了一下,应该是ssh过期了.我们就来生成新的ssh公钥吧. 1. 打开git bash 2. 输入命令: ssh-keygen -t rsa ...
- 给jdk写注释系列之jdk1.6容器(1)-ArrayList源码解析
工作中经常听到别人讲“容器”,各种各样的容器,话说到底什么是容器,通俗的讲“容器就是用来装东西的器皿,比如:水桶就是用来盛水的,水桶就是一个容器.” ok,在我们写程序的时候常常要对大量的对象进行管理 ...
- javaweb学习总结十三(dom4j方式对XML文档进行解析以及Xpath的使用)
一:dom4j方式介绍 对于xml的解析总共有三种 1:jaxp方式,是sun公司开发的,分为sax方式和dom方式 2:jdom方式,后来其中部分人员参与开发dom4j 3:dom4j方式,是现在企 ...
- Linux系统上安装mysql数据库
一:下载并且上传安装包到linux系统上 1:下载地址:http://dev.mysql.com/downloads/mysql/ 2:通过LeapFtp工具,将windows上的mysql安装包拷贝 ...
- LeetCode 231
Power of Two Given an integer, write a function to determine if it is a power of two. /************* ...
- [BigData]关于Hadoop学习笔记第二天(PPT总结)(一)
Plan: 分布式文件系统与HDFS HDFS体系结构与基本概念 HDFS的shell操作 java接口及常用api HADOOP的RPC机制 HDFS源码分析 远程debug 自己设计一分布式文件系 ...
- Nginx - Additional Modules, About Your Visitors
The following set of modules provides extra functionality that will help you find out more informati ...