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()

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM