python搜索汽车价格
❶ 如何抓取汽车之家的车型库 Python中文社区
实际上,关于「如何抓取汽车之家的车型库」,我已经在「使用 Mitmproxy 分析接口」一文中给出了方法,不过那篇文章里讲的是利用 API 接口来抓取数据,一般来说,因为接口不会频繁改动,相对 WEB 页面而言更稳定,所以通常这是数据抓取的最佳选择,不过利用 API 接口来抓取数据有一些缺点,比如有的数据没有 API 接口,亦可能虽然有 API 接口,但是数据使用了加密格式,此时只能通过 WEB 页面来抓取数据。
既然要通过 WEB 页面来抓取数据,那么就不得不提到Scrapy,它可以说是爬虫之王,我曾经听说有人用 Scrapy,以有限的硬件资源在几天的时间里把淘宝商品数据从头到尾撸了一遍,如此看来,本文用 Scrapy 来抓取汽车之家的车型库应该是绰绰有余的了。
在抓取汽车之家的车型库之前,我们应该对其结构有一个大致的了解,按照网络中的描述,其大致分为四个级别,分别是品牌、厂商、车系、车型。本文主要关注车系和车型两个级别的数据。在抓取前我们要确定从哪个页面开始抓取,比较好的选择有两个,分别是产品库和品牌找车,选择哪个都可以,本文选择的是品牌找车,不过因为品牌找车页面使用了 js 来按字母来加载数据,所以直接使用它的话可能会有点不必要的麻烦,好在我们可以直接使用从A到Z的字母页面。
假设你已经有了 Scrapy 的运行环境(注:本文代码以 Python3 版本为准):
shell> scrapy startproject autohome
shell> cd autohome
shell> scrapy genspider automobile www.autohome.com.cn -t crawl
如此就生成了一个基本的蜘蛛骨架,需要说明的是 Scrapy 有两种蜘蛛,分别是 spider 和 crawl,其中 spider 主要用于简单的抓取,而 crawl 则可以用来实现复杂的抓取,复杂在哪里呢?主要是指蜘蛛可以根据规则萃取需要的链接,并且可以逐级自动抓取。就抓取汽车之家的车型库这个任务而言,使用 spider 就可以实现,不过鉴于 crawl 在功能上更强大,本文选择 crawl 来实现,其工作流程大致如下:通过 start_urls 设置起始页,通过 rules 设置处理哪些链接,一旦遇到匹配的链接地址,那么就会触发对应的 callback,在 callback 中可以使用 xpath/css 选择器来选择数据,并且通过 item loader 来加载 item:
车系
车型
文件:autohome/items.py:
# -*- coding: utf-8 -*-
import scrapy
from scrapy.loader.processors import MapCompose, TakeFirst
class SeriesItem(scrapy.Item):
series_id = scrapy.Field(
input_processor=MapCompose(lambda v: v.strip("/")),
output_processor=TakeFirst()
)
series_name = scrapy.Field(output_processor=TakeFirst())
class ModelItem(scrapy.Item):
model_id = scrapy.Field(
input_processor=MapCompose(lambda v: v[6:v.find("#")-1]),
output_processor=TakeFirst()
)
model_name = scrapy.Field(output_processor=TakeFirst())
series_id = scrapy.Field(output_processor=TakeFirst())
文件:autohome/autohome/spiders/automobile.py:
# -*- coding: utf-8 -*-
import json
import string
from scrapy import Request
from scrapy.http import HtmlResponse
from scrapy.linkextractors import LinkExtractor
from scrapy.loader import ItemLoader
from scrapy.spiders import CrawlSpider, Rule
from urllib.parse import parse_qs, urlencode, urlparse
from autohome.items import ModelItem, SeriesItem
class AutomobileSpider(CrawlSpider):
name = "automobile"
allowed_domains = ["www.autohome.com.cn"]
start_urls = [
"" + x + ".html"
for x in string.ascii_uppercase if x not in "EIUV"
]
rules = (
Rule(LinkExtractor(allow=("/\d+/#",)), callback="parse_item"),
)
def parse(self,response):
params = {
"url": response.url,
"status": response.status,
"headers": response.headers,
"body": response.body,
}
response = HtmlResponse(**params)
return super().parse(response)
def parse_item(self, response):
sel = response.css("div.path")
loader = ItemLoader(item=SeriesItem(), selector=sel)
loader.add_css("series_id", "a:last-child::attr(href)")
loader.add_css("series_name", "a:last-child::text")
series = loader.load_item()
# 即将销售 & 在售
for sel in response.css("div.interval01-list-cars-infor"):
loader = ItemLoader(item=ModelItem(), selector=sel)
loader.add_css("model_id", "a::attr(href)")
loader.add_css("model_name", "a::text")
loader.add_value("series_id", series['series_id'])
yield loader.load_item()
# 停售
url = ""
years = response.css(".dropdown-content a::attr(data)")
for year in years.extract():
qs = {
"y": year,
"s": series["series_id"]
}
yield Request(url + "?" + urlencode(qs), self.stop_sale)
def stop_sale(self, response):
data = parse_qs(urlparse(response.url).query)
body = json.loads(response.body_as_unicode())
for spec in body["Spec"]:
yield {
"model_id": str(spec["Id"]),
"model_name": str(spec["Name"]),
"series_id": str(data["s"][0]),
}
把如上两段源代码拷贝到对应的文件里,下面我们就可以让蜘蛛爬起来了:
shell> scrapy crawl automobile -o autohome.csv
抓取的结果会保存到 autohome.csv 里。如果保存到 json 文件中,那么有时候你可能会发现输出的都是 unicode 编码,此时可以设置FEED_EXPORT_ENCODING来解决,如果想保存到数据库中,那么可以使用 Scrapy 的pipeline来实现。
如果你完整读过 Scrapy 的文档,那么可能会记得在spiders一章中有如下描述:
When writing crawl spider rules, avoid using parse as callback, since the CrawlSpider uses the parse method itself to implement its logic. So if you override the parse method, the crawl spider will no longer work.
意思是说,在使用 crawl 的时候,应该避免覆盖 parse 方法,不过本文的源代码中恰恰重写了 parse 方法,究其原因是因为汽车之家的字母页存在不规范的地方:
shell> curl -I h
HTTP/1.1 200 OK
Date: ...
Server: ...
Content-Type: text/html, text/html; charset=gb2312
Content-Length: ...
Last-Modified: ...
Accept-Ranges: ...
X-IP: ...
Powerd-By-Scs: ...
X-Cache: ...
X-Via: ...
Connection: ...
乍看上去好像没什么问题,不过仔细一看就会发现在 Content-Type 中 text/html 存在重复,此问题导致 Scrapy 在判断页面是否是 html 页面时失败。为了修正此问题,我重写了 parse 方法,把原本是 TextResponse 的对象重新包装为 HtmlResponse 对象。通过抓取竟然还帮助汽车之家找到一个 BUG,他们真是应该谢谢我才对。
有时候,为了避免蜘蛛被对方屏蔽,我们需要伪装 User-Agent,甚至通过一些代理服务来伪装自己的 IP,本文篇幅所限,就不多说了,实际上,Scrapy 不仅仅是一个库,更是一个平台,本文涉及的内容只能算是管中窥豹,有兴趣的读者不妨多看看官方文档,此外,网上也有很多例子可供参考。
0 0
❷ Python在汽车行业都有哪些应用
python这东西没有固定的应用领域,换言之,应用非常广。
因为python是个编程语言,理论上讲,用得上编程的领域,除了非常贴近硬件的领域以外,都用得上python。
❸ python 判断实时价格是上涨还是下跌中
具体情况得具体分析,盘整的出现不仅仅出现在头部或底部,也会出现在上涨或下跌途中,根据盘整出现在股价运动的不同阶段,我们可将其分为:上涨中的盘整、下跌中盘整、高档盘整、低档盘整四种情形。
上涨中的盘整:上涨中的盘整是股价经过一段时间急速的上涨后,稍作歇息,然后再次上行。其所对应的前一段涨势往往是弱势后的急速上升,从成交量上看,价升量增,到了盘整阶段,成交量并不萎缩,虽有获利回吐盘抛出,但买气旺盛,足以击退空方。该盘整一般以楔形、旗形整理形态出现。
下跌中的盘整:下跌中的盘整是股价经过一段下跌后,稍有企稳,略有反弹,然后再次调头下行。其所对应的前一段下跌受利空打击,盘整只是空方略作休息,股价略有回升,但经不起空方再次进攻,股价再度下跌,从成交量看,价跌量增。
高档盘整:高档盘整是股价经过一段时间的上涨后,涨势停滞,股价盘旋波动,多方已耗尽能量,股价很高,上涨空间有限,庄家在头部逐步出货,一旦主力撤退,由多转空,股价便会一举向下突破。此种盘整一般以矩形、园弧顶形态出现。
低档盘整:低档盘整是股价经过一段时间的下跌后,股价在底部盘旋,加之利多的出现,人气逐渐聚拢,市场资金并未撤离,只要股价不再下跌,就会纷纷进场,由空转多,主力庄家在盘局中不断吸纳廉价筹码,浮动筹码日益减少,上档压力减轻,多方在此区域蓄势待发。当以上几种情况出现时,盘局就会向上突破了。此种盘整一般会以矩形、园弧底形态出现。
这些可以慢慢去领悟,在股市中没有百分之百的成功战术,只有合理的分析。每个方法技巧都有应用的环境,也有失败的可能。新手在把握不准的情况下不防用个牛股宝手机炒股去跟着牛人榜里的牛人去操作,这样稳妥得多,希望可以帮助到您,祝投资愉快!
❹ 一般来说Python报班多少钱
根据目前市场情况来说,Python报班培训学习费用在2w左右,当然不同的机构,课程安排不同,学习周期和费用也是存在差异的。
现在从事Python培训的机构有很多,建议选择机构的时候从以下几点进行考虑:
1、教学体系:考察机构的教学体系,教学内容是否理论+实战项目教学。
2、师资力量:试听一下机构的课程,看看讲师授课水平如何,看看机构是否有专业的讲师,讲师是否有从业经验或者实战项目经验。
3、就业指导:就业服务,并不是说提供就业,一般提供就业的机构千万不要轻易相信,就业服务主要查看机构是否进行就业指导服务,是否有合作的大企业,有内部推荐就业机会。
最后建议大家在选择机构的时候,一定要亲自试听一下课程,合适自己的才是最好的。
❺ Python培训价格多少
Python培训的价格需要看是什么机构,什么地区,是线上还是线下,每个不同,涉及到的费用也不同。
不过对于想要学习python培训的朋友,费用一般大概是2998-20000之间的水平,学习时间有长有短,长的基本上可以直接就业,就业后,一个月差不多就可以把学费赚到手,因此想要参加培训班的朋友,这个费用相对来讲还是比较合理的。
Python课程分为4个课程阶段:
一、python软件开发基础、二、python高级编程、三、python全栈式WEB工程师课程、四、python爬虫工程师、大数据分析工程师、人工智能工程师。
学习python,一定选择正规的培训机构了,只有正规的培训机构才能对教学质量有保障,同时就业也有保障。
这里推荐大家可以到达内学习。达内时代科技集团有限公司(简称达内教育),成立于2002年。2014年4月3日成功在美国上市。成为中国赴美国上市的职业教育公司,也是引领行业的职业教育公司。达内拥有行业内完善的教研团队,200余位总监级讲师,1000余名教研人员,全方位保障学员学习。。
❻ python费用多少
不贵,1万多等学python已经很便宜了,现在python就业形势这么好,就业一个月也就赚回来了!望采纳!
❼ 如何用python抓取淘宝单个宝贝每个sku的价格
用Python抓取还要写代码,太麻烦了,也不适合比较懒的,不想学写代码的人,干嘛不下个免费的前嗅采集器呢,用可视化采集,只需要点点点就可以抓到你想要的字段信息了,还是比较适合代码基础差、懒得学的人群使用的。你要是想采集点难度较大的网站的话,也可以找客服人员,咨询配置模板的售价,也不是很贵的。
❽ 用Python画小车车
你好,下面是一个对应的代码
import turtle
import time
t = turtle.Pen()
def fun1(t, x, y):
t.forward(x)
t.left(y)
def fun2(t, x, y):
t.forward(x)
t.right(y)
'''
color函数有三个参数
第一个参数指定有多少红色
第二个参数指定有多少绿色
第三个参数指定有多少蓝色
都为0的时候此时为黑色
都为1的时候此时为白色
这种红色,绿色,蓝色的混搭叫做RGB
蓝色和红色混合产生紫色
黄色和红色混合产生橙色
'''
t.color(1, 0, 0)
t.begin_fill()
fun1(t, 100, 90)
fun1(t, 20, 90)
fun2(t, 20, 90)
fun1(t, 20, 90)
fun1(t, 60, 90)
fun2(t, 20, 90)
fun1(t, 20, 90)
t.forward(20)
t.end_fill()
t.color(0, 0, 0)
t.up()
t.forward(10)
t.down()
# 开始位置
#t.begin_fill()
# 画圆
t.circle(10)
# 结束位置
#t.end_fill()
# 设置当前的指定角度为0度
t.setheading(0)
t.up()
t.forward(90)
t.right(90)
t.forward(10)
t.setheading(0)
t.down()
#t.begin_fill()
t.circle(10)
#t.end_fill()
t.up()
time.sleep(20)
❾ python3如何用正则匹配出价格格式的内容
这要看代码内容啊。比如:阿里巴巴的产品价格:
#-*-coding:utf-8-*-
importre
a='<spanclass="valueprice-length-5">22.00</span>'
jg=re.search('<spanclass="valueprice-length-5">(.*?)</span>',a)
print(jg.group(1))