利用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 ...
随机推荐
- Struts_改写客户列表练习
1.CustomerAction修改放入ActionContext 2.list.jsp使用struts标签库
- 利用Git搭建自动部署的Laravel环境 - 钟晨宇的博客 - CSDN博客
目标:服务器上搭建Laravel环境,本地使用IDE进行开发,使用Homestead做本地调试环境,代码提交后自动部署到服务器Root目录下. 下面是整个流程的示意图: 1. 准备工作,搭建LNMP ...
- laravel-admin 安装(总结)
https://www.jianshu.com/p/844b05e4c45a laravel-admin 是一个可以快速帮你构建后台管理的工具,它提供的页面组件和表单元素等功能,能帮助你使用很少的代码 ...
- 2017年浙工大迎新赛热身赛 J Forever97与寄信 【数论/素数/Codeforces Round #382 (Div. 2) D. Taxes】
时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 131072K,其他语言262144K64bit IO Format: %lld 题目描述 Forever97与未央是一对笔友,他们经常互 ...
- cnn.py cs231n
n import numpy as np from cs231n.layers import * from cs231n.fast_layers import * from cs231n.layer_ ...
- 【水滴石穿】douban-movies-react-native
这个项目的话,倒是可以做一个支架页面,就是你需要什么东西,你就可以在里面加,不过也是比较难的地方 就是数据流,数据处理的部分.react可以处理数据的方式很多,没有见过类似于古老的vue时候可以使用的 ...
- UE4碰撞规则详解
UE4的碰撞设置在官方的文档的 物理模拟模块(链接:点击打开链接).但是操作起来感觉坑还是比较多,所以这里总结一下,以防平时经常会漏掉或忽略某些条件.如果想看关于碰撞响应触发,可以参考链接( UE4蓝 ...
- font-weight
font-weight 属性设置文本的粗细. 该属性用于设置显示元素的文本中所用的字体加粗.数字值 400 相当于 关键字 normal,700 等价于 bold. 每个数字值对应的字体加粗必须至少与 ...
- MSSQL 为db创建user
use [IBatisNet]GO if not exists (select * from master.dbo.syslogins where loginname = N'IBatisNet')B ...
- hdu4318 最短路变形
和hdu有一题差不多.给的是损失比,1-c%就是保存了多少,找出最大的保存率即可. #include<stdio.h> #include<iostream> #include& ...