在爬虫中获取数据后的各种存储方法

python爬虫实战篇(知识讲解+爬取小说) 大家谨记爬虫只是用来方便大家从互联网上检索信息,获取免费资源,不得以危害或者窃取对方资源使用为目的进行违法犯罪。牢记网络安全法。 1.爬虫的准备工作 安装第三方库-requests lxml 使用pip命令直接安装requests pip install requests pip install lxml 如果出现失败,请检查网络,或者换源使用阿里云下载(直接换源比较推荐)。 2.爬虫介绍以及基本使用到的方法介绍 概念:(爬虫又被称为网页蜘蛛,网络机器人)就是模拟浏览器发送网络请求,接收请求响应,一种按照 阅读详情

一、文本存储

大体结构是这样的

with open('名字.text','w',encoding='utf-8') as f:

               f.write()

               f.close()

实例如下

class NovelSpider(scrapy.Spider):
    name = 'novel'
    allowed_domains = ['tieba.baidu.com']
    start_urls = ['https://tieba.baidu.com/p/5815118868?pn=1']


    f = open('tieba.txt','a', encoding='utf-8')
    def parse(self, response):
        # print(response.text)
        # print("==========================================================")
        # 找到指定的div的标签,该标签内贴吧内容和作者的集合体
        # div_list = response.xpath('//div[@class="d_post_content j_d_post_content "]')
        div_list = response.xpath('//div[@class="l_post l_post_bright j_l_post clearfix  "]')
        # print(div_list)
        # print("===================================")
        # 找到作者
        for div in div_list:
            # 获取含有louzhubiaoshi_wrap 类名的标签
            # 改类名只有楼主才有
            author = div.xpath('.//div[@class="louzhubiaoshi_wrap"]').extract()
            print("----------------------------------")
            print(author)
            if len(author) !=0:
                # 获取标签内全部文本的方式
                # 1.获取最外层标签,遍历内部所有的子标签,获取标签文本
                # 2,正则去掉所有标签  <.*?> re.comlile
                # 3.text 获取标签的文本 //text()获取标签及子标签的文本
                # 4.使用xpath(string(.))这种方式来获取所有文本并且拼接
                # content_list = div.xpath('.//div[@class="d_post_content j_d_post_content "]/text()').extract()
                content_list = div.xpath('.//div[@class="d_post_content j_d_post_content "]').xpath('string(.)').extract()[0] + '\n'
                # print(content_list)
                # print("000000000000000000000000000000000000000000000000000")
                # self.f.write(content)

                remove = re.compile('\s')
                douhao = re.compile(',')
                content =[]
                for string in content_list:
                    string = string.sub(remove,'',string)
                    string = re.sub(douhao,' ',string)
                    content += string + ','
                # print(content)
                self.f.write(content)
                self.f.write('\n')
        #

如要将数据存储成json格式的话,具体实现如下

import codecs,os,json
class HongxiutianxiangPipeline(object):
    print("========================================")
    def __init__(self):
        self.file = codecs.open(filename='book.json' ,mode='w+',encoding='utf-8')
        self.file.write('"book_list":[')
    def process_item(self, item, spider):
        res = dict(item)
        str = json.dumps(res,ensure_ascii=False)
        self.file.write(str)
        self.file.write(',\n')
        return item
    def close_spider(self ,spSEider):
        self.file.seek(-1,os.SEEK_END)
        self.file.truncate()

        self.file.seek(-1,os.SEEK_END)
        self.file.truncate()

        self.file.write(']')
        self.file.close()

 还有下面的主要是用于数据转码的,防止出现乱码,也是json格式、

# 用来打开指定文件,并且对文件进行转码,防止出现乱码问题
import codecs
import json
class XiaoshuoPipeline(object):
    def __init__(self):
        # w  写文件
        # w+ 读写文件  r 读写文件
        # 以上两个的区别,前者如果文件不存在则创建,后者速写文件,如果文件不存在,则抛出异常
        self.file = codecs.open(filename='book.json',mode='w+',encoding='utf-8')
        # self.file.write("list":"[]")
    # 如果想要将数据写入本地或者使用数据库的时候,这个方法需要保留
    def process_item(self, item, spider):
        # print(item,'==================')
        # 将item对象转化成字典对象
        res = dict(item)
        # print(res,'-------------------')
        # 将字典对象转化成字符串, ascii编码是否可用
        # 如果直接将字典形式的数据写入到文件当中,会发生错误,转化成字符串写入到文件当中
        str = json.dumps(res,ensure_ascii=False)
        # print(str,'1111111111111111111111111111111111')
        # 将数据写入到文件当中
        self.file.write(str)
        self.file.write('\n')
    def open_spider(self,spider):
        print("爬虫开始了")

二、sqlite3微型数据库存储

在爬虫中一般都是在pipeline里面设置的,然后再setting里面的ITEM_PIPELINES解注释,添加

ITEM_PIPELINES ={

     'Job.pipelines.Jobpipeline':300,

}

项目名+要开启的管道名+在管道里新添加的类或者是说要用到的类,这里还有优先级,数字越小优先级越高

import sqlite3
class JobPipeline(object):
    def process_item(self, item, spider):
        return item
class JobDBPipeline(object):
    def open_spider(self,spider):
        self.connect = sqlite3.connect('JobDB')
        self.cursor = self.connect.cursor()
        self.cursor.execute(
            'create table if not exists JobTable(job_name,job_company,job_place,job_time,min_salary,max_salary)')
        self.connect.commit()
    def process_item(self, item,spider):
        self.cursor.execute('insert into JobTable(job_name,job_company,job_place,job_time,min_salary,max_salary) VALUES ("{}","{}","{}","{}","{}","{}")'.format(item['job_name'],item['job_company'],item['job_place'],item['job_time'],item['min_salary'],item['max_salary']))
        self.connect.commit()

    def close_spider(self,spider):
        self.cursor.close()
        self.connect.close()

三、将数据存储到excel表格,以豆瓣电影存储到excel表格为例

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from fake_useragent import UserAgent
import xlwt,requests
from lxml import etree
class DBmovie(object):
    def __init__(self):
        self.base_url = 'https://movie.douban.com/top250'
        self.headers = UserAgent()
        self.workBooke = None
        self.sheet = None
        self.record = 1

    def spider_manage(self):
        self.excel_build()
        self.get_url_code()
        self.workBook.save('电影表.xls')
    def excel_build(self):
        self.workBook = xlwt.Workbook(encoding='utf-8')
        self.sheet = self.workBook.add_sheet('电影排行榜')
        self.sheet.write(0,0,'电影排名')
        self.sheet.write(0,1,'电影名称')
        self.sheet.write(0,2,'演员与导演')
        self.sheet.write(0,3,'电影评分')
        self.sheet.write(0,4,'电影影评')
        # self.sheet.write(0,5,'电影内容')


    def get_url_code(self, url =''):
        headers = {
            'User-Agent': self.headers.random
        }
        full_url = self.base_url +url
        # print(full_url)
        response = requests.get(full_url, headers=headers).text
        # print(response)
        code = etree.HTML(response)
        print(code)
        item_div = code.xpath('//div[@class="item"]')
        # print(item_div)
        for tag in item_div:
            movie_name = tag.xpath('.//div[@class="hd"]/a/span/text()')
            # print(movie_name)
            name=''
            for movie in movie_name:
                name += movie
            # print(name)
            movie_rank = tag.xpath('div/em[@class=""]/text()')[0]
            # print(movie_rank)
            movie_author = tag.xpath('.//div[@class="bd"]/p/text()')[0]
            movie_author = movie_author.strip('\n').replace(' ','')
            # print(movie_author)
            movie_grade = tag.xpath('.//span[@class="rating_num"]/text()')[0]
            # print(movie_grade)
            movie_comment = tag.xpath('.//div[@class="star"]/span[last()]/text()')[0]
            movie_comment = movie_comment[0:-3]
            # print(movie_comment)
            # movie_content = tag.xpath('.//p[@class="quote"]/span/text()')[0]
            # movie_content = movie_content.strip('\n').replace('。','')
            # print(movie_content)
            # print(movie_content)
            self.sheet.write(self.record,0,movie_rank)
            self.sheet.write(self.record,1,name)
            self.sheet.write(self.record,2,movie_author)
            self.sheet.write(self.record,3,movie_grade)
            self.sheet.write(self.record,4,movie_comment)
            # self.sheet.write(self.record,5,movie_content)
            self.record += 1

        self.get_next_page(code)
    def get_next_page(self,code):
        next_url = code.xpath('//span[@class="next"]/a/@href')
        # print(next_url)
        if len(next_url) == 0:
            print("已经是最后一页了")
            return
        self.get_url_code(next_url[0])

movie = DBmovie()
movie.spider_manage()

 

四、mysql数据库存储

class DianyingtiantangPipeline(object):
    def __init__(self):
        self.connect = pymysql.connect(host='localhost',user='root',password='123456',db='Movie',port=3305)
        self.cursor = self.connect.cursor()
    def process_item(self, item, spider):
        self.cursor.execute('insert into movieTable (name ,href) VALUES ("{}","{}")'.format(item['name'],item['href']))
        self.connect.commit()
        return item
    def close_spider(self ,spider):
        self.cursor.close()
        self.connect.close()

 

五、在爬虫终端命令形式存成表格形式

scrapy crawl 爬虫名 -o 爬虫名.csv

 

六、终端命令将数据的解码方式改成utf-8,防止中文乱码

scrapy crawl 爬虫名 -o 爬虫名.json -s FEED_EXPORT_ENCORDING=UTF-8

 

七、将数据中的图片存到本地文件夹

在setting里面添加

IMAGES_STORE = '***'(文件名、默认是在当前目录的父级,在这里你也可选择已存在文件夹的路径)

IMAGES_URLS_FIELD = '***' (一般填写图片的下载路径,在爬虫文件中要特别注意,要传的路径最好带【】就是将得到的数据转储到items里面的时候)

将文本文件存到本地(例如小说之类)

FILES_STORES = '****' (性质和存图片的一样)

FILES_URLS_FIELD = '***'(同上)

 

Pytho爬虫 获取数据以及存储数据 Python 获取数据 阅读详情

相关推荐

Python爬虫第一课:了解爬虫与浏览器原理

一、浏览器的工作原理 当我们要将网页的信息保存到本地时,通常是打开网页,然后通过复制网页的文本,接着粘贴到本地 从上图中,只有我们和浏览器。但是实际上还有一方,那就是「服务器」。 Request 当我们在浏览器中输入一个网址,也叫做URL(Uniform Resource Locator),然后浏览器就会去存储放着这个网址资源文件的服务器获取这个网址的内容,这个过程就叫做「请求」(Request...

fightingoyo的博客 2315

python爬虫存储数据4种方式

##注意:爬取的数据以字典的形式放入了self.data属性中[{},{},{}]如需直接使用需要把数据类型转换为列表,把self.data换成自己的数据存储变量名。mongodb数据库没有表的概念,数据的写入相对较为简单一点。爬取的数据以字典的形式放入了self.data属性中。爬取的数据以字典的形式放入了self.data属性中。爬取的数据还是存放在类的self.data属性中。爬取的数据还是存放在类的self.data属性中。2.数据写入excell文件。2.数据写入excell文件。

m0_50488257的博客 7465

Python爬虫数据存哪里|数据存储到文件的几种方式

爬虫请求解析后的数据,需要保存下来,才能进行下一步的处理,一般保存数据的方式有如下几种: 文件:txt、csv、excel、json等,保存数据量小。 关系型数据库:mysql、oracle等,保存数据量大。 非关系型数据库:Mongodb、Redis等键值对形式存储数据,保存数据量大。 二进制文件:保存爬取的图片、视频、音频等格式数据。 首先,爬取豆瓣读书《平凡的世界》的3页短评信息,然后保存到文件中。 https://book.douban.com/subject/1200840/comments/

吾非同 4111

Scrapy爬虫框架—自定义Pipelines将文件以Json格式存储

我们可以在终端内输入命令,这个就是scrapy自带将文件保存为Json格式的命令。 scrapy crawl xxx -o xxx.json -s FEED_EXPORT_ENCODING=utf-8 本次的内容,我们将通过自定义pipelines将文件以Json格式存储。 我们这次以爬取小说为例。小说网址:https://www.hongxiu.com/,点击进入这个网址,我们这次想要获...

本以为成功很简单,没想到活成普通人都需拼尽全力! 1300

Python爬虫实战:利用最新技术爬取标普500成分股数据

本文将详细介绍如何使用Python最新爬虫技术获取标普500(S&P 500)成分股数据。我们将从网络爬虫基础讲起,逐步深入到高级技巧,包括异步请求、反反爬策略、数据解析与存储等。文章包含完整的代码实现,并对比不同方法的优劣,最后还将探讨数据的可视化与分析应用。

2201_76125261的博客 364

数据采集与存储解决方案

在ARM平台上用ucosii实现的数据采集与存储。

如何使用 Python 爬取多章节小说并保存为文本文件

使用 Python 爬取多章节小说

BARRY_NINE的博客 2903

量化策略分享 | MA超进化:LLT低延迟趋势线

移动平均线(MA)是我们技术分析中常用的一种趋势跟踪指标,但在使用的时候你是否也会有这样的烦恼:交易信号延迟太久,或者交易信号太频繁了!延迟性和平滑性问题似乎是不可兼得的“鱼和熊掌”。 针对这个问题,广发证券基于通信领域的滤波器原理,在《短线择时策略研究之三:低延迟趋势线与交易性择时》中创造性构建了:LLT低延迟趋势线(Low-lag Trendline)。 LLT低延迟趋势线是一种二阶滤波器,阶数相对适宜,相比MA、EMA等均线指标能够降低延迟,同时增强在低频部分的输出信号。 当然,..

量化交易研究 5310

python爬虫——将爬取的数据进行存储

在前面我的博客中,讲了怎么爬取一些简单的数据,但是我们爬取数据的目的是利用和分析这些数据,所以今天我们来试试将这些数据存储起来。 目录序言(一) 通过Excel文件进行存储(二) 通过csv文件进行存储 序言 在将如何将数据存储之前我们必须来了解一个爬虫的过程。 爬虫分为:1.获取数据,2.处理数据,3.存储数据。 在前面的博客中我们已经完成了前两个步骤,就差对数据的存储部分了。通常我们对数据的存...

DA1YuH 的博客 3092

微信内置浏览器抓包全攻略:从ADB配置到Chrome调试(附常见问题解决)

本文提供了一套完整的微信内置浏览器抓包与调试解决方案。从ADB工具的深度配置与稳定性连接开始,详细讲解了如何开启X5内核调试开关,并利用Chrome DevTools建立远程连接。文章重点剖析了Network面板进行网络请求抓取、性能分析和问题定位的实战技巧,并附带了设备连接失败、无网络请求等常见问题的排查指南,帮助开发者高效解决微信H5页面调试难题。

gitlab7runner的博客 543

保姆级教程:在Windows上用Docker Desktop一键部署Dify 1.0.1(附国内镜像加速)

本文提供在Windows系统上使用Docker Desktop快速部署Dify 1.0.1的详细教程,包括环境准备、国内镜像加速配置、Dify容器部署实战及常见问题解决方案。特别针对国内用户优化,确保快速完成部署并提升开发效率。

weixin_33738555的博客 282

Python网络爬虫权威指南 mobi_Python爬虫实战 | 只需 “4步” 入门网络爬虫(有福利哦)...

什么是爬虫?网络爬虫(Web crawler),就是通过网址获得网络中的数据、然后根据目标解析数据、存储目标信息。这个过程可以自动化程序实现,行为类似一个蜘蛛。蜘蛛在互联网上爬行,一个一个网页就是蜘蛛网。这样蜘蛛可以通过一个网页爬行到另外一个网页。网络爬虫也是获取数据的一个途径。对于大数据行业,数据的价值不言而喻,在这个信息爆炸的年代,互联网上有太多的信息数据,对于中小微公司,合理利用爬...

weixin_39622289的博客 318

实体对齐(Entity Alignment)相关论文与数据集整理

实体对齐(Entity Alignment)、知识图谱融合方法总结整理 年份 模型 主要思想 博文推荐 论文 代码 2019 Entity Alignment between Knowledge Graphs Using Attribute Embeddings 实体对齐数据集整理 名称 — DBpe-dia(DBP) LinkedGeoData(LGD) Geonames(GEO) YAGO ...

bjxxkjdxcdd的博客 1万+

python网络爬虫

爬虫流程 ①先由urllib的request打开Url得到网页html文档 ②浏览器打开网页源代码分析元素节点 ③通过Beautiful Soup或则正则表达式提取想要的数据 ④存储数据到本地磁盘或数据库(抓取,分析,存储) 网络爬虫的第一步就是根据URL,获取网页的HTML信息。在Python3中,可以使用urllib.request和requests进行网页爬取。 urllib库是pyt...

爱是与世界平行 753

QuickFix Java 讲解(五)消息的收发与查看

本系列力求手把手教你怎样利用QuickFix Java 搭建自己的 FIX 协议收发平台,以及其中的注意事项。 所有源码的地址(免费): https://github.com/zongzhec/QuickFixPractise 这节我们讨论将Acceptor和Initiator启动以后,收到的消息极其查看方式。 6. 收发双方的通信 6.1. 启动后的通信和登录 为方便起见,这里我们使用统一的源码:https://github.com/zongzhec/QuickFixPractise ..

2246

Notion访问卡顿?一键优化DNS与Hosts提升加载速度

本文针对Notion访问卡顿问题,提供了两种核心优化方案:修改Hosts文件与配置DNS。详细解析了卡顿根源在于网络链路,并手把手指导用户在Windows、Mac、iOS及Android设备上实施优化,旨在通过替换为更优线路,显著提升Notion的页面加载与同步速度。

fff88的博客 1197

python爬虫教程(7)-数据存储之txt和csv

欢迎来到python爬虫大讲堂,现在开始你的爬虫旅程吧! 存储到txt 提取完了我们想要的信息,下一步当然就是把数据存储下来咯,这一次我们先来介绍存储到txt和csv txt也就是文本文件,比较简单,可以参考我的这篇博客:Python入门知识(8)-open()函数 我们直接进入存储到csv: 存储到csv csv也就是我们熟知的表格形式,一般用excel来打开,接下来我们来介绍以下读取csv的方...

pynickle的博客 1101

自然语言处理(扩展学习1):Scheduled Sampling(计划采样)与Teacher forcing(教师强制)

作者:安静到无声作者简介:人工智能和硬件设计博士生、优快云与阿里云开发者博客专家,多项比赛获奖者,发表SCI论文多篇。o( ̄▽ ̄)d。

安静到无声 2143

爬虫基础知识

二.爬虫基础知识 1爬虫简介 网络爬虫,是按照一定的规则,自动抓取互联网信息的程序或者脚本。由于互联网数据的多样性和资源的有限性,根据用户需求定向抓取相关网页并分析已成为如今主流的爬取政策。 爬虫本质:模拟浏览器打开网页,获取网页中我们想要的那部分数据。 在代码中第一行加入#coding = utf-8 或者 #—*— coding:utf-8 —*— 这样可以在代码中包含中文 PYTHON 文件中可以加入main函数用于测试程序 ​ if name == “main”: 2 基本流程 准

FanCheng2017的博客 1093

OData V2 消息在 SAP UI5 中的生成、传播与治理全解

SAP UI5 的 OData V2 消息机制通过自动解析服务端响应头(sap-message)或错误体,将消息推送到全局 MessageModel,实现数据质量保障。关键点包括:1)消息通过目标路径与控件绑定联动,触发高亮等反馈;2)生命周期管理需注意避免自动刷新导致消息丢失;3)常见陷阱如批处理错误重复、内外层消息冲突等可通过精准目标路径或自定义处理器解决。代码示例展示了如何配置模型、消息模型及 MessagePopover 实现端到端消息展示,同时支持控件通过 refreshDataState 自定义

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 231

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

python爬虫

python爬虫 1.任务介绍 1.需求分析 ​ 任务:爬取top250的电影基本信息:名称、豆瓣评分、评价数、电影概况、电影链接等 ​ http://movie.douban.com/top250 2.爬虫的认识 1.什么是爬虫 2.爬虫可以做什么 3.爬虫的本质 **模拟浏览器**打开网页,获取网页中我们想要的那部分数据 3.基本流程 ​ 准备工作——>获取数据——>解析内容——>保存数据 准备工作 通过浏览器查看分析目标网页,学习编程基础规范。 获取数据 通过HTTP库向目

weixin_44953928的博客 402

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

php爬虫爬取豆瓣电影top250内容

查看豆瓣api文档这是豆瓣开放的api中电影部分的文档 https://developers.douban.com/wiki/?title=movie_v2我们直接选择top250之后往下翻阅可以看到参数需求,有两个参数,start和count,分别代表请求开始的起始地址,这里是从0开始的,count代表请求的数目。<br/><br/> 返回数据有我们输入的参数start、c

m0_37471286的博客 3370

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

python如何高效获取和处理A股tick数据?有没有实用的工具包?

用Python高效获取与处理A股tick数据,可极大提升分析效率与准确性。借助实用工具包,数据处理更简单便捷。现在来了解具体方法。

股票量化交易自动交易程序化交易接口 975

【Python爬虫的使用方法案例分享】

• 遵守robots协议:在编写爬虫之前,我们应该先查看目标网站的robots.txt文件,了解网站对爬虫的限制和要求。遵守robots协议不仅有助于保护我们的爬虫不被封禁,也是对我们合法获取数据的尊重。利用Python的强大功能,我们可以轻松编写出功能强大的爬虫程序,抓取所需的数据。但需要注意的是,多线程/多进程会带来额外的复杂性和资源消耗。因此,我们需要设置合理的请求延迟来控制爬虫对服务器的压力。通过上述步骤和注意事项,我们可以编写出一个功能强大且稳定的Python爬虫程序来抓取目标网站上的商品信息。

m0_72675935的博客 594

超牛逼!Python爬虫学习的完整路线推荐_爬虫三部曲

商机发现:招投标情报发现、客户资料发掘、企业客户发现等进行爬虫学习,首先要懂得是,那些我们肉眼可见的光鲜亮丽的网页是由这些源码被浏览器所识别转换成我们看到的网页,这些源码里面必定存在着很多**。**无规矩不成方圆,就是爬虫中的规矩,它告诉爬虫和搜索引擎哪些页面可以抓取,哪些不可以抓取。通常是一个叫作robots.txt的文本文件,放在网站的根目录下。**“获取数据——解析数据——存储数据”**是爬虫的三部曲,大部分爬虫都是按这样的流程来进行,这其实也是模拟了我们使用浏览器获取网页信息的过程。

2401_84139697的博客 2888
上一篇: 代码实现发送邮箱的功能
下一篇: node.js
UserAgent123
博客等级 码龄8年 10粉丝 19原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值