一、爬虫的定义、爬虫的分类(通用爬虫、聚焦爬虫)、爬虫应用场景、爬虫工作原理(最后会发一个完整爬虫代码)

二、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 爬虫与数据可视化--数据提取与存储的更多相关文章

  1. java调用Linux执行Python爬虫,并将数据存储到elasticsearch--(环境脚本搭建)

    java调用Linux执行Python爬虫,并将数据存储到elasticsearch中 一.以下博客代码使用的开发工具及环境如下: 1.idea: 2.jdk:1.8 3.elasticsearch: ...

  2. Python爬虫丨大众点评数据爬虫教程(1)

    大众点评数据获取 --- 基础版本 大众点评是一款非常受普罗大众喜爱的一个第三方的美食相关的点评网站. 因此,该网站的数据也就非常有价值.优惠,评价数量,好评度等数据也就非常受数据公司的欢迎. 今天就 ...

  3. python爬虫——汽车之家数据

    相信很多买车的朋友,首先会在网上查资料,对比车型价格等,首选就是"汽车之家",于是,今天我就给大家扒一扒汽车之家的数据: 一.汽车价格: 首先获取的数据是各款汽车名称.价格范围以及 ...

  4. Python爬虫的三种数据解析方式

    数据解析方式 - 正则 - xpath - bs4 数据解析的原理: 标签的定位 提取标签中存储的文本数据或者标签属性中存储的数据 正则 # 正则表达式 单字符: . : 除换行以外所有字符 [] : ...

  5. 【visio】数据可视化 - 数据展示

    本章讲解如何将形状数据展示成数据图像,也就是将添加的属性,展示在图形上 1.数据图形控制面板 选中图形>右键>数据>编辑数据图形 2.新建数据图形 数据字段:也就是图形的属性 显示为 ...

  6. Python爬虫10-页面解析数据提取思路方法与简单正则应用

    GitHub代码练习地址:正则1:https://github.com/Neo-ML/PythonPractice/blob/master/SpiderPrac15_RE1.py 正则2:match. ...

  7. 使用python爬虫爬取股票数据

    前言: 编写一个爬虫脚本,用于爬取东方财富网的上海股票代码,并通过爬取百度股票的单个股票数据,将所有上海股票数据爬取下来并保存到本地文件中 系统环境: 64位win10系统,64位python3.6, ...

  8. python爬虫爬取天气数据并图形化显示

    前言 使用python进行网页数据的爬取现在已经很常见了,而对天气数据的爬取更是入门级的新手操作,很多人学习爬虫都从天气开始,本文便是介绍了从中国天气网爬取天气数据,能够实现输入想要查询的城市,返回该 ...

  9. Python爬虫之HDU提交数据

    前一篇http://www.cnblogs.com/liyinggang/p/6094338.html 使用了爬虫爬取hdu 的代码,今天实现了将数据向hdu 提交的功能,接下来就是需要将两个功能合并 ...

随机推荐

  1. 51Nod--1247 可能的路径(gcd)

    根据规则可知 假设 (a,b) 可以到达坐标(aa,bb) 那么 aa=a*x+b*y  x y 必定有解  所以 我们只要求两个坐标的gcd看是否相等就好 #include<bits/stdc ...

  2. 内网ntp时间同步配置

    选择局域网中的一台机器作为ntp服务器,在ntp server上安装并启动ntpd客户端上要关闭ntpd,安装ntpdateCentOS7上这两个软件都是自带的,只需根据需要打开或者关闭.注意客户端机 ...

  3. Linux设备树(五 根节点)

    五 根节点 一个最简单的设备树必须包含根节点,cpus节点,memory节点.根节点的名字及全路径都是“/”,至少需要包含model和compatible两个属性.model属性我们在属性那节已经说过 ...

  4. nginx缓存设置(expires)

    一.expires功能说明 nginx缓存的设置可以提高网站性能,对于网站的图片,尤其是新闻网站,图片一旦发布,改动的可能是非常小的,为了减小对服务器请求的压力,提高用户浏览速度,我们可以通过设置ng ...

  5. CMDB服务器管理系统【s5day89】:部分数据表结构-资产入库思路

    1.用django的app作为统一调用库的好处 1.创建repository app截图如下: 2.好处如下: 1.app的本质就是一个文件夹 2.以后所有的app调用数据就只去repository调 ...

  6. JavaScript 正则表达式基础语法

    前言 正则表达式在人们的印象中可能是一堆无法理解的字符,但就是这些符号却实现了字符串的高效操作.通常的情况是,问题本身并不复杂,但没有正则表达式就成了大问题.javascript中的正则表达式作为相当 ...

  7. VSCode CSS自动补充前缀

    1.安装AuotPrefixer. 2.代码里写css样式后,Ctrl+Shift+P,选择AutoPrefix CSS执行 结果如下

  8. struts2简单入门-配置文件-struts.xml

    struts.xml 作用:配置struts中的action,result,package,全局action,result,等等. 基本文件格式: <?xml version="1.0 ...

  9. ado.net 使用:ExecuteReader 无法获取输出参数

    解决方法: 要获取到输出参数.需要连接关闭之后才行. 一般都是用using把打开数据库连接的reader包起来

  10. SQL 两个表有关联,通过其中一个表的列,更新另一个表的列。

    换了工作又开始写SQL了. update dic_rate_package set post_next_day=t.post_next_day from dic_package t inner joi ...