python 爬虫与数据可视化--数据提取与存储
一、爬虫的定义、爬虫的分类(通用爬虫、聚焦爬虫)、爬虫应用场景、爬虫工作原理(最后会发一个完整爬虫代码)
二、http、https的介绍、url的形式、请求方法、响应状态码
url的形式:
请求头:
常见响应状态码(可利用响应状态码判断响应状态assert response.status_code == 200):
三、数据请求,获取响应(requests模块,详细使用方法api文档)
中文文档api:http://docs.python-requests.org/zh_CN/latest/index.html
发送请求格式:requests.get(url,headers=headers,timeout=5) #get方式
requests.post("http://www.baidu.com/", data = data,headers=headers) #post大文本传输,不限制长度,post更安全,data参数为字典
session = requests.session() session.get(url,headers)
cookies与session应用:cookies保存在浏览器端、session保存在服务端,利用session类保持会话连接请求页面,但缺点不能请求多、快容易被识别
四、数据提取与分类(json模块、lxml的etree模块)
通常响应数据分为结构化数据与非结构化数据,结构化数据为json格式等,非结构化数据为html页面等
结构化数据多为json格式,利用浏览器抓包工具,找到对应响应的Json字符串,在转化为python数据类型(字典)
非结构化数据多为html页面直接抓取,利用xpath节点选择,抓取对应数据(需掌握xpath元素定位、配合工具Chrome插件 XPath Helper)
五、数据的保存
利用mongodb数据库来存爬取的数据(安装与部署请见mongodb的安装与配置)或直接write保存到本地
五、糗事百科html数据提取与保存代码
import requests
from lxml import etree
from pymongo import MongoClient client = MongoClient("127.0.0.1",27017)
collection = client["duanzi"]["qiubai"] def get_url_list(): # 1.url的规律,构造一堆url出来
url_list = []
url_temp = "https://www.qiushibaike.com/8hr/page/{}/"
for i in range(1, 14):
url = url_temp.format(i)
url_list.append(url)
return url_list def parse_url(url):
headers = {
"User-Agnet": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"}
r = requests.get(url, headers=headers, timeout=5)
hmtl_str = r.content.decode()
html = etree.HTML(hmtl_str) # 使用etree处理,得到elemnet对象,能够使用xpath方法
return html def get_content_list(html): # 3.提取数据
div_list = html.xpath("//div[@id='content-left']/div")
content_list = []
for div in div_list:
item = {}
item["author_img"] = div.xpath("./div[@class='author clearfix']//img/@src")
if len(item["author_img"]) > 0: # 获取用户的图像图片
item["author_img"] = "https:" + item["author_img"][0]
else:
item["author_img"] = None
item["author_name"] = div.xpath("./div[@class='author clearfix']//h2/text()")
if len(item["author_name"]) > 0: # 获取用户名字
item["author_name"] = item["author_name"][0].strip()
else:
item["author_name"] = None
# 获取性别
item["author_gender"] = div.xpath("./div[@class='author clearfix']/div/@class")
if len(item["author_gender"]) > 0:
item["author_gender"] = item["author_gender"][0].split(" ")[-1].replace("Icon", "")
else:
item["author_gender"] = None
# 获取年龄
item["author_age"] = div.xpath("./div[@class='author clearfix']/div/text()")
if len(item["author_age"]) > 0:
item["author_age"] = item["author_age"][0]
else:
item["author_age"] = None
#获取段子的正文
item["content"] = div.xpath(".//div[@class='content']/span/text()")
item["content"] = [i.strip() for i in item["content"]]
#提取点赞的的数量
item["stats_vote"] = div.xpath(".//span[@class='stats-vote']/i/text()")
if len(item["stats_vote"])>0:
item["stats_vote"] = item["stats_vote"][0]
else:
item["stats_vote"] = None
#提取评论数量
item["stats_comments"] = div.xpath(".//span[@class='stats-comments']//i/text()")
if len(item["stats_comments"])>0:
item["stats_comments"] = item["stats_comments"][0]
else:
item["stats_comments"] = None #提取正文中的文中的图片
item["content_img"] = div.xpath("./div[@class='thumb']//img/@src")
if len(item["content_img"])>0:
item["content_img"] = "https:"+item["content_img"][0]
else:
item["content_img"] = None content_list.append(item)
return content_list def save_content_list(content_list): #保存
for content in content_list:
print(content)
collection.insert(content)
print("*"*100) def run():
# 1.url的规律,构造一堆url出来
url_list = get_url_list()
# 2.遍历url_list,发送请求,获取响应
for url in url_list:
html = parse_url(url)
# 3.提取数据
content_list = get_content_list(html)
# 4.保存
save_content_list(content_list) if __name__ == '__main__':
run()
python 爬虫与数据可视化--数据提取与存储的更多相关文章
- java调用Linux执行Python爬虫,并将数据存储到elasticsearch--(环境脚本搭建)
java调用Linux执行Python爬虫,并将数据存储到elasticsearch中 一.以下博客代码使用的开发工具及环境如下: 1.idea: 2.jdk:1.8 3.elasticsearch: ...
- Python爬虫丨大众点评数据爬虫教程(1)
大众点评数据获取 --- 基础版本 大众点评是一款非常受普罗大众喜爱的一个第三方的美食相关的点评网站. 因此,该网站的数据也就非常有价值.优惠,评价数量,好评度等数据也就非常受数据公司的欢迎. 今天就 ...
- python爬虫——汽车之家数据
相信很多买车的朋友,首先会在网上查资料,对比车型价格等,首选就是"汽车之家",于是,今天我就给大家扒一扒汽车之家的数据: 一.汽车价格: 首先获取的数据是各款汽车名称.价格范围以及 ...
- Python爬虫的三种数据解析方式
数据解析方式 - 正则 - xpath - bs4 数据解析的原理: 标签的定位 提取标签中存储的文本数据或者标签属性中存储的数据 正则 # 正则表达式 单字符: . : 除换行以外所有字符 [] : ...
- 【visio】数据可视化 - 数据展示
本章讲解如何将形状数据展示成数据图像,也就是将添加的属性,展示在图形上 1.数据图形控制面板 选中图形>右键>数据>编辑数据图形 2.新建数据图形 数据字段:也就是图形的属性 显示为 ...
- Python爬虫10-页面解析数据提取思路方法与简单正则应用
GitHub代码练习地址:正则1:https://github.com/Neo-ML/PythonPractice/blob/master/SpiderPrac15_RE1.py 正则2:match. ...
- 使用python爬虫爬取股票数据
前言: 编写一个爬虫脚本,用于爬取东方财富网的上海股票代码,并通过爬取百度股票的单个股票数据,将所有上海股票数据爬取下来并保存到本地文件中 系统环境: 64位win10系统,64位python3.6, ...
- python爬虫爬取天气数据并图形化显示
前言 使用python进行网页数据的爬取现在已经很常见了,而对天气数据的爬取更是入门级的新手操作,很多人学习爬虫都从天气开始,本文便是介绍了从中国天气网爬取天气数据,能够实现输入想要查询的城市,返回该 ...
- Python爬虫之HDU提交数据
前一篇http://www.cnblogs.com/liyinggang/p/6094338.html 使用了爬虫爬取hdu 的代码,今天实现了将数据向hdu 提交的功能,接下来就是需要将两个功能合并 ...
随机推荐
- vue 中 echart 在子组件中只显示一次的问题
问题描述 一次项目开发过程中,需要做一些图表,用的是百度开源的 echarts. vue推荐组件化开发,所以就把每个图表封装成子组件,然后在需要用到该图表的父组件中直接使用. 实际开发中,数据肯定都是 ...
- Tensor是神马?为什么还会Flow?
https://baijiahao.baidu.com/s?id=1568147583188426&wfr=spider&for=pc 也许你已经下载了TensorFlow,而且准备开 ...
- PMP备考资料和备考经验分享(基于PMP第六版)
之前有不少小伙伴私信我说,你PMP考过了,有没有报班呢,有没有自己看的资料,有没有一些经验分享,今天在这里,就统一给大家分享一下,以便大家备考和学习PMP. 先说我自己的情况,我本身是从事项目管理的, ...
- 关于访问Jira和Confluence服务越来越缓慢的解决办法阐述
Jira和Confluence部署在同一台服务器上,跑一段时间后,发现访问jira和confluence时,打开越来越缓慢.这是因为根据主机物理内存不同,默认的java虚拟机内存也会不同(一个较低值) ...
- node.js的基础知识
第一部分知识: .命令行窗口(小黑屏).CMD窗口.终端.shell - 开始菜单 --> 运行 --> CMD --> 回车 - 常用的指令: dir 列出当前目录下的所有文件 c ...
- EM算法(Expectation Maximization Algorithm)初探
1. 通过一个简单的例子直观上理解EM的核心思想 0x1: 问题背景 假设现在有两枚硬币Coin_a和Coin_b,随机抛掷后正面朝上/反面朝上的概率分别是 Coin_a:P1:-P1 Coin_b: ...
- 分布式监控系统开发【day38】:监控数据如何画图(九)
一.画图代码 1.收集处理数据 class GraphGenerator(object): ''' generate graphs ''' def __init__(self,request,redi ...
- 金融量化分析【day112】:初识量化交易
一.摘要 为什么需要量化交易? 量化交易是做什么? 量化交易的价值何在? 做量化交易需要什么? 聚宽是什么? 零基础如何快速入门量化交易? 自测与自学 二.量化交易比传统交易强多少? 它能让你的交易效 ...
- Java IO流操作汇总: inputStream 和 outputStream【转】
我们在进行Android java 开发的时候,经常会遇到各种IO流操作.IO流操作一般分为两类:字符流和字节流.以“Reader”结尾都是字符流,操作的都是字符型的数据:以“Stream”结尾的都是 ...
- 巧用border制作箭头
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...