爬虫中常用的几种数据持久化方式和Django与vue的交互

↘锁芯ラ 提交于 2020-01-10 15:19:06

爬虫中常用的几种数据持久化方式和Django与vue的交互

这里我们说到爬虫中数据持久化方式和Django与vue的交互

Django与vue的交互后端:

CORS_ORIGIN_ALLOW_ALL = True    #开启接口
'corsheaders.middleware.CorsMiddleware',    #放进配置里
就可以完成Django与vue的交互了

第一种存入csv

from lxml import etree
from selenium import webdriver
from time import sleep
import csv    #导入csv模块

ww = webdriver.Chrome(executable_path=r'E:\人工智能\第六个月爬虫\chromedriver.exe')
ww.get('https://xueqiu.com/')
js = 'window.scrollTo(0, document.body.scrollHeight)'
for i in range(3):
    ww.execute_script(js)
    sleep(5)

html = ww.page_source
tree = etree.HTML(html)
p_list = tree.xpath('//div[@class="AnonymousHome_auchor_1RR"]')
# 在这里定义你需要的字段
with open('./a4.csv', 'w', encoding='utf-8') as f:
    w = csv.writer(f, delimiter=',')
    w.writerow(['name'])
for p in p_list:
    name = p.xpath('.//a[@class="AnonymousHome_user-name_3wN"]/text()')[0]
    # 在这里写你需要的数据
    with open('./a4.csv', 'a', encoding='utf-8') as f:
        w = csv.writer(f, delimiter=',')
        w.writerow([name])

第二种存入mongdb数据库

import pymongo  #定义pymongo模块
conn = pymongo.MongoClient()     #实例化
db = conn.*****    # 库名
table = db.*****    #表名
# 持久化    注意这是一个数据
table.insert_one({'****':****})

第三种存入text

    with open('./路径/%s.txt'%name,'w',encoding='utf-8') as f:
        f.write(数据的变量)

第四种存入mysql

import requests
from lxml import etree
import pymysql

# 1.确定url, 发起请求, 获取响应
url = 'http://www.shicimingju.com/book/sanguoyanyi.html'
# UA检测 -- UA 伪装
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
}
res = requests.get(url=url, headers=headers)

# 连接数据库
conn = pymysql.connect(
    host="localhost",
    user="root",
    password="0820",
    database="bian",
    charset="utf8")
cur = conn.cursor()
# 2.数据解析
tree = etree.HTML(res.text)
li_list = tree.xpath('//div[@class="book-mulu"]/ul/li')
for li in li_list:
    title = li.xpath('./a/text()')[0]
    href = li.xpath('./a/@href')[0]
    主要代码:
    sql = 'insert into threecountries values(0, "%s", "%s")' % (title, href)
    cur.execute(sql)
    conn.commit()

第五种存入json

import json

lst = []
for i in range(100):
    d = {'name': '%s名字' % i, 'age': i * 3}
    lst.append(d)
with open('data.json', 'w', encoding='utf-8') as f:
    f.write(json.dumps(lst, ensure_ascii=False, indent=4))

在scrapy框架中持久化json数据

定义一个类

在这里插入图片描述

开通一个新的管道

在这里插入图片描述

下载图片

content=requests.get(url=src,headers=headers).content    #获取图片的二进制流
            name=src.split('/')[-1]
            with open('./img/%s'%name,'wb') as f:
                f.write(content)

在scrapy框架中下载图片

    def img_parse(self, response):
        item = response.meta['item'] 
        with open('./img/%s' % item['imgname'], 'wb') as f:
            f.write(response.body)      
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!