python数据爬虫及可视化分析_python 爬虫与数据可视化--数据提取与存储

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

1458863-20180817144546535-732102092.png

二、http、https的介绍、url的形式、请求方法、响应状态码

url的形式:

1458863-20180817150545151-911421776.png

请求头:

1458863-20180817150522587-1477626571.png

常见响应状态码(可利用响应状态码判断响应状态assert response.status_code == 200):

1458863-20180817150451596-1025136849.png

三、数据请求,获取响应(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保存到本地

1458863-20180817163557879-156212529.png

五、糗事百科html数据提取与保存代码

importrequestsfrom lxml importetreefrom pymongo importMongoClient

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)returnurl_listdefparse_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方法

returnhtmldef get_content_list(html): #3.提取数据

div_list = html.xpath("//div[@id='content-left']/div")

content_list=[]for div indiv_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)returncontent_listdef save_content_list(content_list): #保存

for content incontent_list:print(content)

collection.insert(content)print("*"*100)defrun():#1.url的规律,构造一堆url出来

url_list =get_url_list()#2.遍历url_list,发送请求,获取响应

for url inurl_list:

html=parse_url(url)#3.提取数据

content_list =get_content_list(html)#4.保存

save_content_list(content_list)if __name__ == '__main__':

run()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值