利用scrapy爬取文件后并基于管道化的持久化存储
我们在pycharm上爬取
首先我们可以在本文件打开命令框或在Terminal下创建
scrapy startproject xiaohuaPro ------------创建文件

scrapy genspider xiaohua www.xxx.com ----------创建执行文件
一.首先我们要进行数据的爬取
import scrapy
from xioahuaPro.items import XioahuaproItem class XiaohuaSpider(scrapy.Spider):
name = 'xiaohua'
start_urls=['http://www.521609.com/daxuemeinv/']
#生成一个通用的url模板
url = 'http://www.521609.com/daxuemeinv/list8%d.html'
pageNum =1 def parse(self, response):
li_list=response.xpath('//div[@class="index_img list_center"]/ul/li')
for li in li_list:
name = li.xpath('./a[2]/text() | ./a[2]/b/text()').extract_first()
img_url = 'http://www.521609.com'+li.xpath('./a[1]/img/@src').extract_first()
#实例化一个item类型的对象
item = XioahuaproItem()
item['name'] = name
item['img_url'] = img_url
#item提交给管道
yield item
# 对其他页码的url进行手动i请求的发送
if self.pageNum <= 24: ------爬取的页数
self.pageNum += 1
new_url = format(self.url%self.pageNum)
yield scrapy.Request(url=new_url,callback=self.parse)
之后再items.py文件下为item对象设置属性
将爬取到的所有信息全部设置为item的属性
# -*- coding: utf-8 -*- # Define here the models for your scraped items
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.html import scrapy class XioahuaproItem(scrapy.Item):
# define the fields for your item here like:
name = scrapy.Field()
img_url = scrapy.Field()
二.写入pipelines.py内容
首先写入到自定义的文件里去
作用:将解析到的数据存储到某一个平台中。
import pymysql
from redis import Redis
class XioahuaproPipeline(object):
fp = None
def open_spider(self,spider):
print('开始爬虫!')
self.fp = open('./xiaohua.txt','w',encoding='utf-8')
#作用:实现持久化存储的操作
#该方法的item参数就可以接收爬虫文件提交过来的item对象
#该方法每接收一个item就会被调用一次(调用多次)
def process_item(self, item, spider):
name = item['name']
img_url = item['img_url']
self.fp.write(name+':'+img_url+'\n')
#返回值的作用:就是将item传递给下一个即将被执行的管道类
return item
#
def close_spider(self,spider):
print('结束爬虫!')
self.fp.close()
#
写到数据库里面,我们要在数据库里面创建个表(将mysql和redis都启动)
class MysqlPipeline(object):
conn = None
cursor = None
def open_spider(self, spider):
#解决数据库字段无法存储中文处理:alter table tableName convert to charset utf8;
self.conn = pymysql.Connect(host='127.0.0.1',port=3306,user='root',password='',db='test',charset='utf8')
print(self.conn)
def process_item(self, item, spider):
self.cursor = self.conn.cursor()
try:
self.cursor.execute('insert into xiaohua values ("%s","%s")'%(item['name'],item['img_url']))
self.conn.commit()
except Exception as e:
print(e)
self.conn.rollback()
return item
def close_spider(self, spider):
self.cursor.close()
self.conn.close()
在相同的文件下创建redis类写入数据
class RedisPipeline(object):
conn = None
def open_spider(self, spider):
self.conn = Redis(host='127.0.0.1',port=6379)
print(self.conn)
def process_item(self, item, spider):
dic = {
'name':item['name'],
'img_url':item['img_url']
}
print(str(dic))
self.conn.lpush('xiaohua',str(dic))
return item
def close_spider(self, spider):
pass
三.更改配置文件,在settings.py里面
#添加上这行代码
USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36' # Obey robots.txt rules
ROBOTSTXT_OBEY = False -----改成False
ITEM_PIPELINES = {
'xioahuaPro.pipelines.XioahuaproPipeline': 300, ---对应文件
# 'xioahuaPro.pipelines.MysqlPipeline': 301, ----对应数据库
# 'xioahuaPro.pipelines.RedisPipeline': 302, -----对应redis
}
LOG_LEVEL = 'ERROR'
# CRITICAL --严重错误
#ERROR ---一般错误
#WARNING ---警告信息
#INFO ---一般信息
#DEBUG --调试信息
然后我们在终端去指定爬虫程序
scrapy crawl 名字(name对应的值)
利用scrapy爬取文件后并基于管道化的持久化存储的更多相关文章
- 利用Scrapy爬取所有知乎用户详细信息并存至MongoDB
欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者 :崔庆才 本节分享一下爬取知乎用户所有用户信息的 Scrapy 爬虫实战. 本节目标 本节要实现的内容有 ...
- 利用scrapy爬取腾讯的招聘信息
利用scrapy框架抓取腾讯的招聘信息,爬取地址为:https://hr.tencent.com/position.php 抓取字段包括:招聘岗位,人数,工作地点,发布时间,及具体的工作要求和工作任务 ...
- 利用 Scrapy 爬取知乎用户信息
思路:通过获取知乎某个大V的关注列表和被关注列表,查看该大V和其关注用户和被关注用户的详细信息,然后通过层层递归调用,实现获取关注用户和被关注用户的关注列表和被关注列表,最终实现获取大量用户信息. 一 ...
- 爬虫实战--利用Scrapy爬取知乎用户信息
思路: 主要逻辑图:
- 以豌豆荚为例,用 Scrapy 爬取分类多级页面
本文转载自以下网站:以豌豆荚为例,用 Scrapy 爬取分类多级页面 https://www.makcyun.top/web_scraping_withpython17.html 需要学习的地方: 1 ...
- python scrapy爬取HBS 汉堡南美航运公司柜号信息
下面分享个scrapy的例子 利用scrapy爬取HBS 船公司柜号信息 1.前期准备 查询提单号下的柜号有哪些,主要是在下面的网站上,输入提单号,然后点击查询 https://www.hamburg ...
- 【转载】教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神
原文:教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神 本博文将带领你从入门到精通爬虫框架Scrapy,最终具备爬取任何网页的数据的能力.本文以校花网为例进行爬取,校花网:http:/ ...
- Scrapy爬取小说简单逻辑
Scrapy爬取小说简单逻辑 一 准备工作 1)安装Python 2)安装PIP 3)安装scrapy 4)安装pywin32 5)安装VCForPython27.exe ........... 具体 ...
- Scrapy爬取Ajax(异步加载)网页实例——简书付费连载
这两天学习了Scrapy爬虫框架的基本使用,练习的例子爬取的都是传统的直接加载完网页的内容,就想试试爬取用Ajax技术加载的网页. 这里以简书里的优选连载网页为例分享一下我的爬取过程. 网址为: ht ...
随机推荐
- rabbitmq启用和禁用web界面管理插件
rabbitmq默认安装启动以后,是没有开启web管理界面的,通过rabbitmq-plugins list命令可列出插件的启用和禁用状态. 使用rabbitmq-plugins enable xxx ...
- Lab1 ex1 物理页内存分配算法的实现
调用流程如下 kern_init --> pmm_init-->page_init-->init_memmap--> pmm_manager->init_memmap 从 ...
- dom4解析 XML
Java XML解析工具 dom4j介绍及使用实例 Java XML解析工具 dom4j介绍及使用实例 dom4j介绍 dom4j的项目地址:http://sourceforge.net/projec ...
- tp5.1 本地正常, 线上route.php不起作用的问题
由于本项目 的.htaccess文件是放在根目录的, 上传没有覆盖,重新编辑 <IfModule mod_rewrite.c> Options +FollowSymlinks -Multi ...
- VMware ESXi 6.7服务器设置开机自动启动虚拟机
VMware ESXi 6.7服务器设置开机自动启动虚拟机,具体操作步骤如下 1.登陆到VMware ESXi 6.7 web 界面 2.导航器-->主机-->管理 将自动启动修改为 ...
- linux常用目录介绍
bin:全称binary,含义是二进制,该目录中存放的都是一些二进制文件,这些文件都是可以被运行的. dev:该目录主要存放的是外接设备,例如:光盘等.注意:在其中的设备是不能被直接使用的,需要挂载( ...
- SSH 相关基础
检查是否安装: sudo apt-cache policy openssh-client sudo apt-cache policy openssh-server 也可直接用 sudo apt-ca ...
- Mybatis使用 爬坑记录
1.mapper.xml可以直接 使用map集合, parameterType="java.util.Map" resultType="java.util.Map&quo ...
- 麻烦把JS的事件环给我安排一下
上次大家跟我吃饱喝足又撸了一遍PromiseA+,想必大家肯定满脑子想的都是西瓜可乐...... 什么西瓜可乐!明明是Promise! 呃,清醒一下,今天大家搬个小板凳,听我说说JS中比较有意思的事件 ...
- JQuery--mouseover()与moseout()的区别
mouseover()与mouseout()区别 普通鼠标移入移出事件 语法: mouseover()/mouseout() 功能: 当鼠标移入/移出到添加事件的元素或其子元素的时候,都会被触发!!m ...