一、设置与编写

打开cmd,选择好路径
1.创建项目scrapy startproject projectname
d:\爬虫\11.scrapy>scrapy startproject  testproject
2.生成模板scrapy genspider testspider www.xxx.com
d:\爬虫\11.scrapy\testproject>`scrapy genspider testspider www.xxx.com`
3.配置

3.1.打开testspider.py

# -*- coding: utf-8 -*-
import scrapy class TestspiderSpider(scrapy.Spider):
name = 'testspider'
# allowed_domains = ['www.xxx.com'] #爬取的网站必须属于该域名,否则不会爬取,所以一般不用
start_urls = ['https://xueqiu.com/'] #起始的url列表 def parse(self, response): #回调函数,进行解析或数据储存reponse为请求后的响应对象,
title = response.xpath('//*[@id="app"]/div[3]/div[1]/div[2]/div[2]/div[1]/div/h3/a/text()').extract()
author = response.xpath('////*[@id="app"]/div[3]/div[1]/div[2]/div[2]/div[1]/div/div/div[1]/a[2]text()')
print(title)
return dict(zip(author,title)) #xpath函数返回的列表中存放的数据为Selector类型的数据。我们解析到的内容被封装在了Selector对象中,需要调用extract()方法将解析的内容从Selecor中取出。

3.2.打开settings.py

#对user-agent进行修改

USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36'

ROBOTSTXT_OBEY = False  #将True改为False,否则将遵守robots协议
4.通过cmd执行
scrapy crawl testspider :该种执行形式会显示执行的日志信息
scrapy crawl testspider --nolog:该种执行形式不会显示执行的日志信息
d:\爬虫\11.scrapy\testproject>scrapy crawl testspider --nolog
['一家真正懂金融的金融科技公司,成功转型助贷业务….', '大江奔涌,日夜前行,看好中国,做多中国股市!', '最好的时代!最好的地方!', '在A股年化收益达到100%后对股市的一些思考', '大国制造从芯片 说起', '【悬赏】拼多多又双叒叕新高,他能站稳电商第二极吗?', '童装霸主巴拉巴拉的爸爸:森马服饰解析(上)', '不了解股票的强相关,你将永远陷入股票投机的怪圈', '充电5分钟、续航150公里 宁德时代推出动力电池新技术', '选择困难,重庆农商行发行询价该报多少?']

二、持久化储存

1.基于终端指令的持久化储存

保证parse方法返回一个可迭代类型的对象

 scrapy crawl 爬虫文件名称 -o xxx.json
支持的文件格式:json、csv、xml、pickle、marshal
保存为json格式,会转换成bytes类型

D:\爬虫\11.scrapy\testproject\testproject>scrapy crawl testspider -o title.json --nolog

2.基于管道的持久化储存

流程

  1. 在爬虫文件中进行数据解析
  2. 在item类中声明相关的属性用于存储解析到的数据
  3. 将解析到的数据封装到item类的对象中
  4. 将item对象提交给管道
  5. item对象会作为管道类中的process_item的参数进行处理
  6. process_item方法中编写基于item持久化存储的操作
  7. 在setting中开启管道

items.py :结合抓取到的数据定义类用于实例化存储数据

import scrapy
class TestprojectItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
author = scrapy.Field()
title = scrapy.Field()
# ------------提交到MySQL -------------------

testspider.py :数据解析、封装并提交到管道

# -*- coding: utf-8 -*-
import scrapy from testproject.items import TestprojectItem
class TestspiderSpider(scrapy.Spider):
name = 'testspider'
allowed_domains = ['www.xxx.com']
start_urls = ['https://xueqiu.com/'] def parse(self, response):
title = response.xpath('//*[@id="app"]/div[3]/div[1]/div[2]/div[2]/div[1]/div/h3/a/text()').extract()
author = response.xpath('//*[@id="app"]/div[3]/div[1]/div[2]/div[2]/div[1]/div/div/div[1]/a[2]/text()').extract()
for i,j in zip(title,author):
item = TestprojectItem()
item['author'] = j
item['title'] = i
yield item
#将数据封装的item对象中,并返回给管道

pipelines.py:将抓取到的数据保存

import pymysql
# ------------ Pipeline:保存本地 ------------------------
class TestprojectPipeline(object):
def __init__(self):
self.f = None
def open_spider(self,spider):
self.f = open('./雪球.txt','w',encoding='utf8') def process_item(self, item, spider):
author = item['author']
title = item['title']
self.f.write(author+':'+title+'\n')
return item #将数据返回给下一个管道对象
def close_spider(self,spider):
self.f.close()
#------------- Pipeline:导入mysql数据库 -------------------
class MysqlPipeline(object):
conn = None
cur = None
def open_spider(self,spider):
self.conn = pymysql.connect(
host = '192.168.1.4',
port = 3306,
user = 'syx',
password = '123',
database = 'spider',
charset = 'utf8',
)
self.cur = self.conn.cursor()
def process_item(self, item, spider):
author = item['author']
title = item['title']
sql = 'insert into xueqiu values("%s","%s")' % (author,title)
try:
self.cur.execute(sql)
self.conn.commit()
except Exception as e:
print(e)
self.conn.rollback()
return item
def close_spider(self,spider):
print('finish')
self.cur.close()
self.conn.close()

setting.py:对ITEM_PIPELINES进行配置,数值小优先级高

ITEM_PIPELINES = {
'testproject.pipelines.TestprojectPipeline': 300,
'testproject.pipelines.MysqlPipeline': 301,
}
#日志级别设置:INFO、DEBUG、ERROR
LOG_LEVEL = 'ERROR'

Scrapy框架1——简单使用的更多相关文章

  1. Scrapy框架的简单使用

    一.安装依赖 #Windows平台 1.pip3 install wheel 3.pip3 install lxml 4.pip3 install pyopenssl 5.pip3 install p ...

  2. Scrapy框架学习笔记

    1.Scrapy简介 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网 ...

  3. Python -- Scrapy 框架简单介绍(Scrapy 安装及项目创建)

    Python -- Scrapy 框架简单介绍 最近在学习python 爬虫,先后了解学习urllib.urllib2.requests等,后来发现爬虫也有很多框架,而推荐学习最多就是Scrapy框架 ...

  4. Python爬虫框架--Scrapy安装以及简单实用

    scrapy框架 框架 ​ -具有很多功能且具有很强通用性的一个项目模板 环境安装: Linux: ​        pip3 install scrapy ​ ​ ​  Windows: ​     ...

  5. Python爬虫Scrapy框架入门(2)

    本文是跟着大神博客,尝试从网站上爬一堆东西,一堆你懂得的东西 附上原创链接: http://www.cnblogs.com/qiyeboy/p/5428240.html 基本思路是,查看网页元素,填写 ...

  6. Python爬虫从入门到放弃(十一)之 Scrapy框架整体的一个了解

    这里是通过爬取伯乐在线的全部文章为例子,让自己先对scrapy进行一个整理的理解 该例子中的详细代码会放到我的github地址:https://github.com/pythonsite/spider ...

  7. 一个scrapy框架的爬虫(爬取京东图书)

    我们的这个爬虫设计来爬取京东图书(jd.com). scrapy框架相信大家比较了解了.里面有很多复杂的机制,超出本文的范围. 1.爬虫spider tips: 1.xpath的语法比较坑,但是你可以 ...

  8. 安装scrapy框架的常见问题及其解决方法

    下面小编讲一下自己在windows10安装及配置Scrapy中遇到的一些坑及其解决的方法,现在总结如下,希望对大家有所帮助. 常见问题一:pip版本需要升级 如果你的pip版本比较老,可能在安装的过程 ...

  9. 关于使用scrapy框架编写爬虫以及Ajax动态加载问题、反爬问题解决方案

    Python爬虫总结 总的来说,Python爬虫所做的事情分为两个部分,1:将网页的内容全部抓取下来,2:对抓取到的内容和进行解析,得到我们需要的信息. 目前公认比较好用的爬虫框架为Scrapy,而且 ...

随机推荐

  1. TP-Link TL-WR941N Ver 5.1安装OPENWRT过程

    昨天为了试验下adsl多拨刷OPENWRT成砖了,硬件是WR941N Ver 5.1,用的是在原厂固件下的web界面直刷openwrt-ar71xx-tl-wr941nd-v4-squashfs-fa ...

  2. 迁移mysql数据位置

    查看位置: show variables like '%datadir%'; /var/lib/mysql

  3. 文献阅读 | Resetting histone modifications during human parental-to-zygotic transition

    Resetting histone modifications during human parental-to-zygotic transition 人类亲本-合子转变中组蛋白修饰重编程 sci-h ...

  4. CopyOnWrite 思想在 Kafka 源码中的运用

    CopyOnWrite 思想在 Kafka 源码中的运用 在 Kafka 的内核源码中,有这么一个场景,客户端在向 Kafka 写数据的时候,会把消息先写入客户端本地的内存缓冲,然后在内存缓冲里形成一 ...

  5. Gradle: 一个诡异的问题(ERROR: Failed to parse XML AndroidManifest.xml ParseError at [row,col]:[5,5] Message: expected start or end tag)

    今天同事说他下了一个老版本的AS项目死活编不过,我心想不就是一个项目么,编不过要么就是代码有问题,要么就是依赖库不完整这能有什么问题,于是自己在自己电脑试了下,结果自己也中招了: 乍一看这个错误,说是 ...

  6. android -------- java.net.UnknownServiceException

    最近升级了Android的API版本时 ,导致我的网络请求失败了, 出现了这个错误 java.net.UnknownServiceException, 这个错误,我在网上查到这个主要是由于,我们的Ok ...

  7. Android点击事件通过kotlin几种实现方式总结

    一般来说,Android点击事件通过kotlin有以下几种实现方式: 1.通过全局接口View.OnClickListener实现,代码如下 //class MainActivity : AppCom ...

  8. Vue中创建单文件组件 注册组件 以及组件的使用

    <template> <div id="app"> <v-home></v-home> <hr > <br> ...

  9. IFC构件位置数据与revit模型中对应构件位置数据对比

    IFC构件位置数据与revit模型中对应构件位置数据对比

  10. python for 无限循环

    class Infinit: def __iter__(self): return self def __next__(self): return None for i in Infinit(): p ...