阅读本文需要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
结果
其实科目三并不难呀, 前提是要好好练习!!!“熟能生巧”还是硬道理啊!!!
获取源码, 后台回复 【科三】