在拜读末位大佬的文章后,我厚着脸皮出了这第一篇文章,来记录我这小小的成功时刻,虽然python还是很简单的吗,但好歹也是小爬了个网站。
首先
先要导入我们所需要的第三放库,一些常用的比如,pandas . re . matplotlib. BeautifulSoup
requests ,这些在爬虫过程钟基本都会用到,导入的话,我用的是pycharm,比较简单的方法就是
import 你想要的库,另一种就是点开file,就是下图左上角那个
点开后选择我鼠标点成蓝色的那个Settings
进入后,找到project:pythProject 其中那个Python Interpreter
点击加号,进行第三方库的导入,在里面输入你想导入的库,由于网路原因,可能会有点慢,要耐心等待
这就是今天我们要用到的几个库,好了准备工作还有最后一项,就是搞个浏览器,我在这里用的chorme,也就是谷歌浏览器,需要下载的伙伴们可以到百度下载
开始
打开我们所要爬取的网页,摁键盘的f12,进入到开发者模式,点击network,同时按下Ctrl+R
查看网页信息,随便选取一个文件查看,查找我们所需要的信息,来模拟浏览器访问网站
我们今天要爬取的数据只有两个,一个是果品行情 那句话,还有就是旁边的时间,话不多说,开搞,
先获取我们想要的网页数据,通过这个函数,顺便写个try except函数来看看我们有没有错
然后就要用到BeautiSoup方法来解析页面了,顺便建立一个文本文档来存储我们爬取的数据
之后就是在浏览器找到我们所需要获取的数据标签位置,是div 下面的ul里面的li a 标签
对果品行情进行标签筛选,这筛选的时候确实把我难住了,这是恶补了一下资料
对发布日期进行筛选
然后将其存入到 excel中,希望你有啊,建立好记得返回数据,不然会报错
excel 存入样式,这样就成功了
然后就到了可视化了,由于数据较少,我就没有弄太多的表,就弄了一个直方图
其中需要我们修改的只有几个数据,xlable,和ylable,其中有个字体管理
my_font = font_manager.FontProperties(fname='f:/data/SourceHanSerifSC-Bold.otf')
这一行的字体需要自行下载导入,其实也可以把这句话删除,我感觉好像没有用
图表运行成果图
最后附上完整代码
# !/usr/bin/python
import re
import pandas
import requests
from bs4 import BeautifulSoup
import matplotlib.pyplot as plt
from matplotlib import font_manager
def get_html(url):
try:
r = requests.get(url) # 使用get来获取网页数据
r.raise_for_status() # 如果返回参数不为200,抛出异常
r.encoding = r.apparent_encoding # 获取网页编码方式
return r.text # 返回获取的内容
except:
return '报错'
def save(html):
# 解析网页
soup = BeautifulSoup(html, 'html.parser') # 指定Beautiful的解析器为“html.parser”
with open('f:/data/B_dataa.txt', 'r+', encoding='UTF-8') as f:
f.write(soup.text)
frute=[] #果品行情
datay=[] #发布日期
# ******************************************** 果品行情
for tag in soup.find_all('div', class_='jg_ar_lrft_ar'):
for ul in tag.select('ul'):
for li in ul.select('li'):
fru =li.a.get_text()
frute.append(str(fru))
print(frute)
# ******************************************** 发布日期
# for ul in soup.find_all(name='ul'):
# print(ul.find_all(name='li'))
# for li in ul.find_all(name='li'):
# print(li.string)
for tag in soup.find_all('div', class_='jg_ar_lrft_ar'):
for ul in tag.select('ul'):
for li in ul.select('li'):
dat = li.span.get_text()
datay.append(str(dat))
print(datay)
# # 存储至excel表格中
info = {'果品行情': frute, '发布日期': datay}
dm_file = pandas.DataFrame(info)
dm_file.to_excel('Dongmana.xls', sheet_name="农业数据")
# # 将所有列表返回
return frute, datay
def view(info):
my_font = font_manager.FontProperties(fname='f:/data/SourceHanSerifSC-Bold.otf') # 设置中文字体(图标中能显示中文)
dm_frute = info[0] # 果品行情
dm_datay = info[1] # 发布日期
# 为了坐标轴上能显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# **********************************************************************综合评分和播放量对比
# *******综合评分条形图
fig, ax1 = plt.subplots()
plt.bar(dm_frute, dm_datay, color='red') # 设置柱状图
plt.title('农业数据分析', fontproperties=my_font) # 表标题
ax1.tick_params(labelsize=6)
plt.xlabel('果品行情') # 横轴名
plt.ylabel('发布日期') # 纵轴名
plt.xticks(rotation=90, color='green') # 设置横坐标变量名旋转度数和颜色
plt.show()
def main():
url ='http://www.1nongjing.com/gphq/list_127_2.html' # 网址
html = get_html(url) # 获取返回值
# print(html)
info = save(html)
view(info)
if __name__ == '__main__':
main()