scrapy-redis分布式爬取猫眼电影
能够利用redis缓存数据库的优点去重来避免数据的大面积冗余
1、首先就是要创建猫眼爬虫项目
2、进入项目内部创建一个爬虫文件
创建完文件之后就是要爬取的内容,我这边以爬取猫眼电影的title和link为例(这个完全看个人你可以先去写爬虫,然后再来写items文件)
3、编写item文件
class MaoyanTestItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
title = scrapy.Field()
link = scrapy.Field()
pass
4、编写爬虫文件(确定自己要爬的内容,然后与items中的指定字段连接起来)
import scrapy
from fake_useragent import UserAgent
from scrapy.selector import Selector
from maoyan_test.items import MaoyanTestItem headers = {
'user-agent': UserAgent(verify_ssl=False).chrome
} class MovieSpiderSpider(scrapy.Spider):
name = 'movie'
allowed_domains = ['www.maoyan.com/board/4']
start_urls = ['http://www.maoyan.com/board/4?offset=%s'] def start_requests(self):
for i in range(10):
url = self.start_urls[0] % str((i*10))
yield scrapy.Request(url, callback=self.parse, dont_filter=False, headers=headers) def parse(self, response):
item = MaoyanTestItem()
sel = Selector(response)
movie_list = sel.xpath('//dl[@class="board-wrapper"]/dd')
for movie in movie_list: title = movie.xpath('a/@title').extract_first()
link = 'https://www.maoyan.com' + movie.xpath('a/@href').extract_first()
item['title'] = title
item['link'] = link
yield item
5、编写Pipline文件:--> 这里面主要是通过redis缓存数据库来对数据进行筛选,然后将数据主要保存到Mysql中
首先配置settings文件
# 这个是需要手动加上的,通过scrapy-redis自带的pipeline将item存入redis中
ITEM_PIPELINES = {
'maoyan_test.pipelines.MaoyanTestPipeline': 300,
'scrapy_redis.pipelines.RedisPipeline': 400
}
# 启动redis自带的去重
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
# 启用调度器
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
# 是否在关闭spider的时候保存记录
SCHEDULER_PERSIST = True
# 使用优先级调度请求队列(默认使用)
SCHEDULER_QUEUE_CLASS =
'scrapy_redis.queue.SpiderPriorityQueue'
# 指定redis的地址和端口,有密码的需要加上密码
REDIS_HOST = '127.0.0.1'
REDIS_PORT = ''
REDIS_PARAMS = {
'password': '',
} #SCHEDULER_QUEUE_KEY = '%(spider)s:requests' # 调度器中请求存放在redis中的key
#SCHEDULER_SERIALIZER = "scrapy_redis.picklecompat" # 对保存到redis中的数据进行序列化,默认使用pickle #SCHEDULER_FLUSH_ON_START = False # 是否在开始之前清空 调度器和去重记录,True=清空,False=不清空
# SCHEDULER_IDLE_BEFORE_CLOSE = 10 # 去调度器中获取数据时,如果为空,最多等待时间(最后没数据,未获取到)。
#SCHEDULER_DUPEFILTER_KEY = '%(spider)s:dupefilter' # 去重规则,在redis中保存时对应的key chouti:dupefilter
#SCHEDULER_DUPEFILTER_CLASS = 'scrapy_redis.dupefilter.RFPDupeFilter' # 去重规则对应处理的类
#DUPEFILTER_DEBUG = False
#上述的扩展类需要的
MYEXT_ENABLED = True # 开启扩展
IDLE_NUMBER = 10 # 配置空闲持续时间单位为 10个 ,一个时间单位为5s #如果为True,则使用redis的'spop'进行操作。
#因为本次请求每一次带上的都是时间戳,所以就用了lpush
#如果需要避免起始网址列表出现重复,这个选项非常有用。开启此选项urls必须通过sadd添加,否则会出现类型错误。
#REDIS_START_URLS_AS_SET = True
之后就是要在pipeline文件中将真是的数据保存到MySQL中:
import pymysql class MaoyanTestPipeline(object):
comments = [] def __init__(self):
self.conn = pymysql.connect(
host='localhost',
user='root',
passwd='',
port=3306,
db='spider',
charset='utf8',
autocommit=True
)
self.cursor = self.conn.cursor() def process_item(self, item, spider): self.comments.append([item['title'], item['link']])
if len(self.comments) == 1:
self.insert_to_sql(self.comments)
self.comments.clear() return item def close_spider(self, spider):
self.insert_to_sql(self.comments) def insert_to_sql(self, data):
try:
sql = 'insert into maoyan_movie (title, link) values (%s, %s);'
print(data)
self.cursor.executemany(sql, data[0])
except:
print('插入数据有误...')
self.conn.rollback()
scrapy-redis分布式爬取猫眼电影的更多相关文章
- 爬虫--scrapy+redis分布式爬取58同城北京全站租房数据
作业需求: 1.基于Spider或者CrawlSpider进行租房信息的爬取 2.本机搭建分布式环境对租房信息进行爬取 3.搭建多台机器的分布式环境,多台机器同时进行租房数据爬取 建议:用Pychar ...
- scrapy爬取猫眼电影排行榜
做爬虫的人,一定离不开的一个框架就是scrapy框架,写小项目的时候可以用requests模块就能得到结果,但是当爬取的数据量大的时候,就一定要用到框架. 下面先练练手,用scrapy写一个爬取猫眼电 ...
- 爬虫系列(1)-----python爬取猫眼电影top100榜
对于Python初学者来说,爬虫技能是应该是最好入门,也是最能够有让自己有成就感的,今天在整理代码时,整理了一下之前自己学习爬虫的一些代码,今天先上一个简单的例子,手把手教你入门Python爬虫,爬取 ...
- Python 爬取猫眼电影最受期待榜
主要爬取猫眼电影最受期待榜的电影排名.图片链接.名称.主演.上映时间. 思路:1.定义一个获取网页源代码的函数: 2.定义一个解析网页源代码的函数: 3.定义一个将解析的数据保存为本地文件的函数: ...
- 一起学爬虫——使用xpath库爬取猫眼电影国内票房榜
之前分享了一篇使用requests库爬取豆瓣电影250的文章,今天继续分享使用xpath爬取猫眼电影热播口碑榜 XPATH语法 XPATH(XML Path Language)是一门用于从XML文件中 ...
- python应用-爬取猫眼电影top100
import requests import re import json import time from requests.exceptions import RequestException d ...
- 14-Requests+正则表达式爬取猫眼电影
'''Requests+正则表达式爬取猫眼电影TOP100''''''流程框架:抓去单页内容:利用requests请求目标站点,得到单个网页HTML代码,返回结果.正则表达式分析:根据HTML代码分析 ...
- 50 行代码教你爬取猫眼电影 TOP100 榜所有信息
对于Python初学者来说,爬虫技能是应该是最好入门,也是最能够有让自己有成就感的,今天,恋习Python的手把手系列,手把手教你入门Python爬虫,爬取猫眼电影TOP100榜信息,将涉及到基础爬虫 ...
- 40行代码爬取猫眼电影TOP100榜所有信息
主要内容: 一.基础爬虫框架的三大模块 二.完整代码解析及效果展示 1️⃣ 基础爬虫框架的三大模块 1.HTML下载器:利用requests模块下载HTML网页. 2.HTML解析器:利用re正则表 ...
随机推荐
- javascript数组去重 js数组去重
数组去重的方法 一.利用ES6 Set去重(ES6中最常用) function unique (arr) { return Array.from(new Set(arr)) } var arr = [ ...
- Docker 更新版本
Docker 更新版本 原来版本 1.10 更新后的版本 19.03.1 更新 Docker 版本需要注意的问题: 注意系统是否支持新版本的储存驱动. 19.03.01 版本默认使用的储存驱动是 ov ...
- react-navigation报错
用react-navigation配置路由时,出现如下报错或白屏. 我的代码原来是 import {AppRegistry} from 'react-native'; import App from ...
- 测试自动化:java+selenium3 UI自动化(2) - 启动Firefox
1. selenium和浏览器 基于selenium的这套自动化体系,其实现关键就在于对于各浏览器的顺畅操作. 事实上当selenium刚开始起家的时候,他使用的还是javascript注入的方式来驱 ...
- 聊一聊Java字符串的不可变
前言 在 Java 开发中 String (字符串)对象是我们使用最频繁的对象,也是很重要的对象.正是使用得如此频繁,String 在实现层面上不断进行优化,从 Java6 到 Java7,再到 Ja ...
- Sqlserver将表中某列数据以符号分成多行
WITH testtb2 AS ( UNION ALL ) ) ) ) ) PERCENT SUBSTRING(VisitorCard, STA - LENS, LENS) AS OrderReque ...
- adb 最常用最简单的命令-install/push/pull 使用
以vivo测试机为例1.网上下载adb工具包,安装---网上有教程2.手机连接电脑后,进入手机设置--更多设置---开发者选项,打开开发者选项和USB调试: (不同手机开发者选项进入方式不同)3.打开 ...
- ajax方法请求成功后,没有执行success的方法
$.ajax( { type: "POST", url: "AddSupplier.aspx", dataType:"text", data ...
- ZooKeeper 相关概念以及使用小结
Dubbo 通过注册中心在分布式环境中实现服务的注册与发现,而注册中心通常采用 ZooKeeper,研究注册中心相关源码绕不开 ZooKeeper,所以学习了 ZooKeeper 的基本概念以及相关 ...
- random库的使用
一.random库介绍 random库是使用随机数的Python标准库 伪随机数:采用梅森旋转算法生成的(伪)随机序列中元素 random库主要用于生成随机数 使用random库:import ran ...