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 提交的功能,接下来就是需要将两个功能合并 ...
随机推荐
- The 19th Zhejiang University Programming Contest Sponsored by TuSimple (Mirror) B"Even Number Theory"(找规律???)
传送门 题意: 给出了三个新定义: E-prime : ∀ num ∈ E,不存在两个偶数a,b,使得 num=a*b;(简言之,num的一对因子不能全为偶数) E-prime factorizati ...
- (最短路 Floyd) P2910 [USACO08OPEN]寻宝之路Clear And Present Danger 洛谷
题意翻译 题目描述 农夫约翰正驾驶一条小艇在牛勒比海上航行. 海上有N(1≤N≤100)个岛屿,用1到N编号.约翰从1号小岛出发,最后到达N号小岛. 一张藏宝图上说,如果他的路程上经过的小岛依次出现了 ...
- redis源码解析(1):redisObject对象说明
Redis在实现键值对数据库时,并没有直接使用数据结构,而是基于已有的数据结构创建了一个对象系统,每种对象至少包含一种数据结构. redis3.0 中对象结构: typedef struct redi ...
- tty
tty一词源于Teletypes,或teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西,后来这东西被键盘和显示器取代,所以现在叫终端比较合适. 终端 ...
- 简单的实现HTTP密码验证登陆
1.首先需要安装 httpd-tools yum install -y httpd-tools 2.安装完成后设置用户名密码,我这里用的是NGINX htpasswd -bc /mypath/ngin ...
- Centos7的目录结构
CentOS 目录结构 : /: 根目录,一般根目录下只存放目录,不要存放文件,/etc./bin./dev./lib./sbin应该和根目录放置在一个分区中/bin:/usr/bin: 可执行二进制 ...
- org.hibernate.ObjectNotFoundException: No row with the given identifier exists解决办法
hibernate-取消关联外键引用数据丢失抛异常的设置@NotFound hibernate项目里面配了很多many-to-one的关联,后台在查询数据时已经作了健全性判断,但还是经常抛出对象找不到 ...
- 为Nexus配置阿里云代理仓库
Nexus默认远程仓库为https://repo1.maven.org/maven2/ 慢死,还常连不上. 可以添加阿里云代理仓库 URL:http://maven.aliyun.com/nexus/ ...
- DirectX11 With Windows SDK--20 硬件实例化与视锥体裁剪
前言 这一章将了解如何在DirectX 11利用硬件实例化技术高效地绘制重复的物体,以及使用视锥体裁剪技术提前将位于视锥体外的物体进行排除. 在此之前需要额外了解的章节如下: 章节回顾 18 使用Di ...
- Python字节数组【bytes/bytearray】
bytes >>> type(b'xxxxx') <class 'bytes'> >>> type('xxxxx') <class 'str'&g ...