Python爬取各大汽车销量信息

tech2022-10-04  100

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

滑稽研究所 | 作者

滑稽研究所 | 来源

我们可以看到这个网页上面有我们想要的信息,有汽车的品牌名以及上半年的销量总和。通过对比几个比较有名的车评网,该网站的数据是真实可靠的。

 

可以看到这个页面的数据都是存放在许多div标签里的。属于同级关系。为什么这个页面的数据看起来如此简洁?之前我们爬取豆瓣影评信息时,页面会有图片和超链接,这些信息都需要用单独的标签与文字区分出来。而我们本次只需要爬取文字内容,所以标签看着十分的简洁。

整块儿的内容都是在一个大的div标签下,各个车辆的品牌及销量又在下一级的div标签中。我们用遍历的方法来提取每个div标签里的内容。

代码:

 

import scrapy import plotly as py import plotly.graph_objs as go pyplt = py.offline.plot class CarSpider(scrapy.Spider): name = 'car' start_urls = ['http://www.515fa.com/xldp/dp_22926.html'] def parse(self, response): #print(response.body) for div in response.xpath('//div[@class="wen1"]/div[@class="w_con"]'): name = div.xpath('//div[@class="w_con"]/div/strong/text()').extract()[:10] total = div.xpath('//div[@class="w_con"]/div/text()').re("\\d{5,6}") print(name) print(total) data = [go.Bar( x=total, y=name, orientation='h' )] layout = go.Layout( title='2020年1~6月汽车销量排行榜' ) figure = go.Figure(data=data, layout=layout) pyplt(figure, filename='1.html')

 

 

注意这个总结部分和车辆的信息是同级的div标签,加上最后一部分我们会拿到十一个div标签里的内容。但是我们只需要车辆信息。所以我们只提取十个元素,通过“[:10]”。切片操作来完成。

 

我们在分析页面的时候发现,销量、品牌,测评它们的标签是一样的。我们的要么只爬一个div块儿内的内容,要么全部爬取下来。我们选择把文字内容全部爬取下来。

我们发现品牌名在strong标签下,但是销量却是和其他通用div标签。在拿到全部内容之后,通过正则表达式,筛选我们需要的内容。分析数据发现销量在万和十万这样一个区间。也就是说我们只需要匹配五位数和六位数即可。我们使用re("\\d{5,6}")来筛选。d就是数字的意思后面的参数则是我们想匹配的位数。得到运行结果如下。

 

对比之后确定就是我们需要的数据。拿到数据之后我们使用plotly库进行可视化处理。go.Bar是绘制柱状图时的方法。x,y需要传入的是列表形式的数据。折线图绘制是go.Scatter。不同的图对应不同的方法。

下面是绘制出来的可交互的销量排行榜,鼠标放上去会显示对应的信息。相比文字这样的图表显然表现力更好。

 

数据可视化部分代码:

 

import plotly as py import plotly.graph_objs as go pyplt = py.offline.plot #x,y传入你的数据。 data = [go.Bar( x=[], y=[], orientation = 'h' )] layout = go.Layout( title = '输入你的标题' ) figure = go.Figure(data = data, layout = layout) pyplt(figure, filename='1.html') 本文首发于python黑洞网,csdn同步更新
最新回复(0)