首先交代背景,逗逼女朋友每个月要花费半天多的时间去汽车网上找三十多个城市、十多款车型的报价数据,而且他们部门其它人也要做这种繁琐的工作。我在网络卡屎的情况下帮她做了一回,我就打死都想写个程序把这种stupid的工作自动搞定。

上论坛一问,了解到原来这个叫爬虫,用python写比较简单。

那就开始学python,学爬虫。

其实没具体学python,或者对于爬虫的基本了解,直接看的这位博主的文章[Python]网络爬虫(六):一个简单的百度贴吧的小爬虫,这是一个系列,花了点时间全看下来大概python照着模式写就够用了。

爬虫(Spider)的英文名其实很形象,整个互联网就是一张大网,而爬虫就像一种蜘蛛能够在这个网上爬来爬去,从一个网址跳转到另一个网站,抓取有价值的东西。

本程序所用python为3.4.2,系统为win7-64位,所有用到的插件请下载对应的版本

然后是网页的url分析,就是去多看多找,查看网页源码看是否能看到直接要的数据,如果找得到,可以直接使用正则表达正拿到数据,如果找不到,是js动态生成的,就去看源码里的js代码,搜索关键字url去找js拿去request的url,分析它的情况。

在本例中,汽车之家的数据是分析js代码所得url,通过url可直接请求得到城市与低价信息,用正则表达式获取

易车网数据可通过网页源码获取,所以其url就是浏览器地址上的url,通过url可请求到整个网页,再用正则表达式获取城市与价格信息

所有数据获取之后通过xlwr3和xlrd、xlutils保存到EXCEL中

源码

# -*- coding: utf-8 -*-

#---------------------------------------

# 程序:汽车之家&易车网最低价格抓取爬虫

# 版本:0.1

# 作者:top_along

# 日期:2015-01-24

# 语言:Python 3.4.2

# 操作:直接打开

# 功能:抓取汽车之家上所有城市所需车型最低报价。

#---------------------------------------

import string, urllib.request

import re

import os

import xlwt3 as xlwt

import xlrd

from xlutils.copy import copy

import time

#from citys import citys

#汽车之家抓取函数

def qichezhijia(filename, cityId, specId):

url = 'http://www.autohome.com.cn/ashx/AjaxDealerPrice.ashx?cityid=' \

+ str(cityId) + '00&specId=' + str(specId)

m = urllib.request.urlopen(url).read()

unicodePage = m.decode('gbk')

reg = '([0-9\\.]+).*cityNameDefault=\'(.+)\';'

items = re.search(reg, unicodePage, re.S)

if items == None:

return

city = str(items.group(2))

price = str(items.group(1))

if city == "全国":

return

output = '[汽车之家]: ' + city + ' 数据正在写入...'

print(output)

saveToExcel(filename, cityId, specId, price, 0)

return

#易车网抓取函数

def yichewang(filename, cityId, specId):

url = 'http://car.bitauto.com/' + str(specId) \

+ '/baojia/c' + str(cityId) + '/'

m = urllib.request.urlopen(url).read()

unicodePage = m.decode('utf-8')

regCity = '

  • (.+):
  • '

    items = re.search(regCity, unicodePage, re.S)

    if items == None:

    return

    city = str(items.group(1))

    regPrice = '裸车售价:([0-9\\.]+)万元

  • '

    prices = re.findall(regPrice, unicodePage, re.S)

    prices = set(prices)

    if len(prices) == 0:

    return

    price = prices.pop()

    for p in prices:

    if p < price:

    price = p

    output = '[易车网]: ' + city + ' 数据正在写入...'

    print(output)

    saveToExcel(filename, cityId, specId, price, 1)

    return

    #保存数据到Excel

    #city为城市名,specId为汽车id,两者决定Excel中的位置

    #price为价格,sheetId为汽车之家与易车网之间两个sheet切换

    def saveToExcel(filename, cityId, specId, price, sheetId):

    rdbook = xlrd.open_workbook(filename)

    rdsheet = rdbook.sheet_by_index(sheetId)

    city_col = rdsheet.col_values(0)

    try:

    row = city_col.index(cityId)

    except:

    return

    spec_row = rdsheet.row_values(0)

    try:

    col = spec_row.index(specId)

    except:

    return

    wtbook = copy(rdbook)

    wtsheet = wtbook.get_sheet(sheetId)

    wtsheet.write(row, col, price)

    wtbook.save(filename)

    return

    def openExcel(filename):

    rdbook = xlrd.open_workbook(filename)

    #汽车之家

    rdsheet = rdbook.sheet_by_index(0)

    specs = rdsheet.row_values(0)

    specs = set(specs)

    specs.remove('')

    citys = rdsheet.col_values(0)

    citys = set(citys)

    citys.remove('')

    print('[汽车之家]数据准备写入')

    for city in citys:

    for spec in specs:

    qichezhijia(filename, city, spec)

    #易车网

    rdsheet = rdbook.sheet_by_index(1)

    specs = rdsheet.row_values(0)

    specs = set(specs)

    specs.remove('')

    print(specs)

    citys = rdsheet.col_values(0)

    citys = set(citys)

    citys.remove('')

    print(citys)

    print('[易车网]数据准备写入')

    for city in citys:

    for spec in specs:

    yichewang(filename, city, spec)

    return

    def entry():

    print('汽车之家&易车网最低价格抓取爬虫')

    print('版本:0.1')

    print('作者:top_along')

    print('操作说明:')

    print('1、请确保当前文件夹下有文件“报价数据.xls”,且该文件未打开')

    print('2、“报价数据.xls”格式、扩展,请参见说明')

    print('3、请输入口令“阳娟阳娟变变变”开始')

    print('4、Enjoy...\n')

    keyword = input("请输入口令:\r\n")

    if keyword == "阳娟阳娟变变变":

    filename = u"报价数据.xls"

    openExcel(filename)

    input("输入任意字符回车退出")

    else:

    print("你真调皮...")

    time.sleep(2)

    print("你的电脑将在20秒内重启...")

    time.sleep(5)

    print("赶紧保存...")

    time.sleep(5)

    print("还有10秒...")

    time.sleep(5)

    print("5...")

    time.sleep(1)

    print("4...")

    time.sleep(1)

    print("3...")

    time.sleep(1)

    print("2...")

    time.sleep(1)

    print("1...")

    time.sleep(1)

    print("God bless you...")

    time.sleep(1)

    #程序入口

    entry()

    保存制作exe请移驾

    打包后闪退的情况是缺少部分插件,参见

python 报价程序_【python】简单爬虫制作(汽车之家易车网报价爬虫)相关推荐

  1. 【python】简单爬虫制作(汽车之家易车网报价爬虫)

    首先交代背景,逗逼女朋友每个月要花费半天多的时间去汽车网上找三十多个城市.十多款车型的报价数据,而且他们部门其它人也要做这种繁琐的工作.我在网络卡屎的情况下帮她做了一回,我就打死都想写个程序把这种st ...

  2. 【有趣的Python小程序】Python多个简单上手的库制作WalkLattice 走格子游戏 (思路篇)上

    篇写上一个思路篇,那么今天我们就来完成这一项工作 源代码和配套文件 链接: https://caiyun.139.com/m/i?135ClY1yWrSKX 提取码:e4pq 复制内容打开中国移动云盘 ...

  3. python怎么爬虫理数据_Python神技能 | 使用爬虫获取汽车之家全车型数据

    最近想在工作相关的项目上做技术改进,需要全而准的车型数据,寻寻觅觅而不得,所以就只能自己动手丰衣足食,到网上获(窃)得(取)数据了. 汽车之家是大家公认的数据做的比较好的汽车网站,所以就用它吧.(感谢 ...

  4. python 写csv scrapy_Python神技能 | 使用爬虫获取汽车之家全车型数据

    最近想在工作相关的项目上做技术改进,需要全而准的车型数据,寻寻觅觅而不得,所以就只能自己动手丰衣足食,到网上获(窃)得(取)数据了. 汽车之家是大家公认的数据做的比较好的汽车网站,所以就用它吧.(感谢 ...

  5. Python进阶之Scrapy利用ImagesPipeline抓取汽车之家宝马5系缩略图

    Python进阶之Scrapy利用ImagesPipeline抓取汽车之家宝马5系缩略图 1. 创建项目 2. 使用ImagesPipeline爬取数据 items.py setings.py aut ...

  6. python新手程序_推荐:一个适合于Python新手的入门练手项目

    随着人工智能的兴起,国内掀起了一股Python学习热潮,入门级编程语言,大多选择Python,有经验的程序员,也开始学习Python,正所谓是人生苦短,我用Python 有个Python入门练手项目, ...

  7. python http服务器_超简单的Python HTTP服务

    超如果你急需一个简单的Web Server,但你又不想去下载并安装那些复杂的HTTP服务程序,比如:Apache,ISS等.那么, Python 可能帮助你.使用Python可以完成一个简单的内建 H ...

  8. python剪刀石头布程序_使用Python Tkinter实现剪刀石头布小游戏功能

    编写剪刀石头布游戏 让我们使用Python 3和Tkinter开发相同的游戏.我们可以将游戏命名为Rock-Paper-Scissors-Lizard-Spock. 规则和玩法 ock crushes ...

  9. python计算在月球的体重程序_# Python程序语言设计基础(第二版)程序练习题

    Python程序语言设计基础(第二版)程序练习题 3.1 重量计算,月球上物体的体重是在地球上的16.5%,假如你在地球上每年增长0.5kg,编写程序输出未来10年你在地球和月球上的体重状况. cur ...

最新文章

  1. Excel如何设置单元格行高,办公入门
  2. 图像滤镜艺术---(Lightleaks Filter)漏光滤镜
  3. 数据结构与算法笔记 - 绪论
  4. 运动目标检测、阴影检测及目标跟踪中用得到的标准测试视频下载
  5. php 汉字转拼音类,PHP汉字转换拼音的类_php
  6. OPENCV-3 学习笔记
  7. 拨盘Demo大赛,获奖公布-20170710
  8. c语言行列坐标是先行后j,C语言学习之行列操作
  9. 一休自评应聘:我是如何进入51CTO的?
  10. [Ext JS]5.9 嵌套Grid的实现及注意事项
  11. 关于未在本地计算机上注册“Microsoft.Jet.OleDb.4.0”提供程序的解决办法
  12. CC2500 使用总结
  13. markdown/LaTeX中在字母下方输入圆点的方法
  14. 机械传动机构思维导图
  15. anconda各个版本下载
  16. 个人免签收款系统-支付宝,直接入账到个人账号,没第三方
  17. STM32 - 使用FSMC控制LCD
  18. MapReduce 原理与实践
  19. 企业业财一体化落地难?ERP系统推进业财融合,助力成功
  20. 罗庄高新区电子计算机学校,厉害了!临沂这101所中小学要出名了!罗庄这些学校上榜(附全名单)...

热门文章

  1. web安全-上传漏洞-Ewebeditor编辑器漏洞利用
  2. *******贪吃蛇********
  3. 获取ubuntu管理员权限
  4. java项目如何启动tomcat服务器,Java web项目启动Tomcat报错解决方案
  5. spyder python教程_如何在python(spyder)中解析参数?
  6. spyder的一些设置
  7. 【DL】第 10 章: 元学习
  8. 服务器内存分为哪些类型
  9. windowsSP2 下 用 FINDPASS 截取密码
  10. 左上角到右下角的路径 oj_【机器人路径规划】快速扩展随机树(RRT)算法