网络数据收集方法
目前主流且合法的网络数据收集方法主要有三种:
- 开放数据集下载;
- API读取;
- 爬虫抓取;
爬虫概念
维基百科:网络爬虫(Web Crawler),简称爬虫,也叫网络蜘蛛,是一种用来自动浏览万维网的网络机器人。
小实践
运行环境
Anaconda;
安装好anaconda后从https://github.com/zhaihulu/DataScience下载对应数据集并解压后,从终端用cd命令进入解压后文件夹的目录。
进入该目录后安装包管理工具pipenv,pipenv详细功能等自行搜索。
安装命令:pip install pipenv
安装后执行命令:pipenv install
启动虚拟env:pipenv shell
最后输入:jupyter notebook
爬虫实现
爬取目标网页:https://www.jianshu.com/p/85f4624485b9
要求:提取文中各个教程链接和链接名称并导出到excel。
知识储备:HTML CSS 数据结构等。
代码(jupyter notebook平台):
!pip install requests_html #安装requests_html库
from requests_html import HTMLSession
import pandas as pd
url = 'https://www.jianshu.com/p/85f4624485b9'
sel = '._2rhmJa > p > a:nth-child(1)'#所需数据的标签路径
def get_link_text(sel):
mylist = []
try:
results = r.html.find(sel)
for result in results:
mytext = result.text
mylink = list(result.absolute_links)[0]
mylist.append((mytext,mylink))
return mylist
except:
return None
df = pd.DataFrame(get_link_text(sel))
df.columns = ['text','link'] #修改列名
df.to_csv('output.csv',encoding='gbk',index=False)#导出为csv文件,csv可以用excel打开,指定编码gbk,因为utf-8可能乱码
注:如何准确定位需要的数据位置?
也就是怎么找到上面代码中的sel:我用的是火狐。
鼠标右击->检查->选中某个链接->复制:CSS选择器
要抓取多个链接,每个链接的标签路径不一样,何如?——对比!
找了其中两个路径:
._2rhmJa > p:nth-child(40) > a:nth-child(1)
._2rhmJa > p:nth-child(37) > a:nth-child(1)
对比一下发现只有p标签后面内容稍有不同,因此可以尝试不指定具体的p,得出最终标签路径:
._2rhmJa > p > a:nth-child(1)
参考书:
《数亦有道:python数据科学指南》