阅读本文需要3分钟
01起因
就在上周五, 也就是5月24号, 也就是本狗的阳历生日的这天, 本狗考了科目三, 结果是:“唉”, 没想到过了。用一句小时候经常听的话来讲这次的成绩就是——“一根油条, 俩个鸡蛋”。厉害吧!!!
不过相反, 也有人挂了, 垂头丧气。于是,出于好奇的我,爬取了若干数据, 看看大家的科目三到底是哪个项目最致命 , 以及分布的地区。
02经过
1.首先老样子, 爬取数据
需要的模块:
import random import requests import time from lxml import etree from urllib.parse import urljoin import csv
构造每页的url:
data_list = [] def url_(): url = 'https://bbs.pcauto.com.cn/forum-22487-{}.html' for i in range(2, 10): new_url = url.format(i) parse_url(new_url)
构造每个帖子详情的url:
def parse_url(url): baseurl = 'https:' response = requests.get(url, headers=headers) text = response.text html = etree.HTML(text) tbodys = html.xpath('//table[@class="data_table"]//tbody')[1:] for tbody in tbodys: user_urls = tbody.xpath('.//span[@class="checkbox_title"]//a/@href')[0] new_user_urls = urljoin(baseurl, user_urls) parse_data(new_user_urls) time.sleep(random.randint(1, 1))
爬取数据:
def parse_data(url): global cities data = {} response = requests.get(url, headers=headers) text = response.text html = etree.HTML(text) questions = html.xpath('//h1[@class="yh"]/i/text()')[0] data['question'] = questions try: cities = ''.join(html.xpath('//div[contains(@class, "psot_wrap_first")]//div[@class="user_info"]/ul//li//a[@class="dblue"]//text()')).split()[1] except Exception: pass data['city'] = cities print(data) data_list.append(data) csv_()
保存入库:
def csv_(): headers = [ 'question', 'city'] with open('question.csv', 'w', encoding='gbk', newline='')as fb: writer = csv.DictWriter(fb, headers) writer.writeheader() writer.writerows(data_list)
数据采集就完毕了!!!
2.接下来进行数据可视化
词云:
“紧张”, “靠边”, “转弯”, “技巧”, “教练”等,都是考生关注的!!!
代码:
import jieba import wordcloud import matplotlib.pyplot as plt f = open('question.csv', 'r', encoding='utf-8') t = f.read() f.close() lis = jieba.lcut(t) txt = " ".join(lis) w = wordcloud.WordCloud( width=1000, font_path='C:\Windows\Fonts\simfang.ttf', height=700) w.generate(" ".join(jieba.lcut(txt))).to_file('cloud111.png') plt.imshow(w) plt.axis("off") plt.show()
地区分布:
主要通过提取City这个字段。Python中的地图可视化主要通过Basemap模块,这个模块需要从国外网站下载地图信息,使用起来非常的不便。百度的ECharts在前端使用的比较多,虽然社区里提供了pyecharts项目,可我注意到因为政策的改变,目前Echarts不再支持导出地图的功能,所以地图的定制方面目前依然是一个问题。
主流的技术方案是配置全国各省市的JSON数据,这里使用的是BDP个人版,这是一个零编程的方案,我们通过Python导出一个CSV文件,然后将其上传到BDP中,通过简单拖拽就可以制作可视化地图,简直不能再简单。
考生主要集中在广东省, 河南省和河北省。
03结果
其实科目三并不难呀, 前提是要好好练习!!!“熟能生巧”还是硬道理啊!!!
获取源码, 后台回复 【科三】