一、思维定式
之前我们一说爬虫就会想到的是
- requests第三方库
- selenium
- scrapy
- beautifulsoup
- urllib urllib3
等等很多的Python第三方库,当然了java也可以用来爬虫,但是效率比较慢。毕竟Python内置了很多的爬虫三方库,直接调用就可以。
二、pandas使用
说道数据分析,我们最重要也是最费时间的工作其实就是数据的清洗(ETL)工作,数据的干净与否会直接影响你后续的分析、建模、得出决策等方面。所以在我认识的pandas基本是用来做数据的处理。现在很多会用Python中pandas库的人基本都不会去使用Excel,说实话Excel属实有点慢,尤其处理大量的数据。
pandas、numpy、matplotlib被称为数据分析的‘三剑客’!但是我忘记了pandas也是可以用来爬虫的!!震惊。。。
三、pandas爬虫
- pd.read_html方法
- 作用:快速获取在html中页面中table格式的数据
示例数据截图:
类似这种网页中的表格类型的数据。
先说一下这个方法的参数:
常用的参数:
io:可以是url、html文本、本地文件等;
flavor:解析器;
header:标题行;
skiprows:跳过的行;
attrs:属性,比如 attrs = {‘id’: ‘table’};
parse_dates:解析日期
注意:返回的结果是DataFrame组成的list。
四、爬虫实战
- 我们尝试去爬取上面微博热搜的数据:
其实代码很简单:
import schedule
import pandas as pd
from datetime import datetime
import logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s: %(message)s')
count = 0
def get_content():
global count # 全局变量count
print('----------- 正在爬取数据 -------------')
url = 'https://s.weibo.com/top/summary?cate=realtimehot&sudaref=s.weibo.com&display=0&retcode=6102'
df = pd.read_html(url)
print(df[0])
df = pd.read_html(url)[0][1:11][['序号', '关键词']] # 获取热搜前10
time_ = datetime.now().strftime("%Y/%m/%d %H:%M") # 获取当前时间
df['序号'] = df['序号'].apply(int)
df['热度'] = df['关键词'].str.split(' ', expand=True)[1]
df['关键词'] = df['关键词'].str.split(' ', expand=True)[0]
df['时间'] = [time_] * len(df['序号'])
if count == 0:
df.to_csv('datas.csv', mode='a+', index=False, encoding='gbk')
count += 1
else:
df.to_csv('datas.csv', mode='a+', index=False, header=False, encoding='gbk')
# 定时爬虫
schedule.every(1).minutes.do(get_content)
while True:
schedule.run_pending()
结果如下:
大家可以自己试一下,当然有其他好的爬虫方法也可以给博主留言,谢谢大家支持!!!!