scrapy批量保存mysql_scrapy操作mysql/批量下载图片

1.操作mysql

items.py

c82043efc97c?from=singlemessage

image

meiju.py

c82043efc97c?from=singlemessage

image

3.piplines.py

c82043efc97c?from=singlemessage

image

4.settings.py

c82043efc97c?from=singlemessage

image

批量下载图片。分类

需求:按电影分类,获取里面的演职员图片。并存入各自的分类当中

效果:

c82043efc97c?from=singlemessage

image

代码

因为我们主要工作是下载。不存入数据库。存入数据库的话可以参考上面部分。

现在只需要修改spiders/xxx_spiders.py文件。就是开启项目适合生成的文件

我的是这个

c82043efc97c?from=singlemessage

image

以下是这个文件夹的代码。

# -*- coding: utf-8 -*-

import scrapy

import os

import urllib.request

import re

class DoubanDetailSpidersSpider(scrapy.Spider):

name = 'douban_detail_spiders'

allowed_domains = ['movie.douban.com']

start_urls = ['https://movie.douban.com/top250']

file_path = "D:\\www\\scrapy\\douban_detail\\image\\"

def parse(self, response):

movie_list = response.xpath("//div[@class='article']//ol[@class='grid_view']/li")

for i_item in movie_list:

# 封面图

master_pic_path = i_item.xpath(".//div[@class='pic']//a//img/@src").extract_first()

# 文件名

name = i_item.xpath(".//div[@class='info']//a/span[1]/text()").extract_first()

# 创建文件夹

self.fileIsBeing(name)

# 详情连接

detail_url = i_item.xpath(".//div[@class='hd']//a/@href").extract_first()

# 获取详情里面内容

# detail_link = response.xpath(".//div[@class='hd']//a/@href").extract()

# for link in detail_link:

# 这里是进入二级页面操作,在for循环里面。

yield scrapy.Request(detail_url, meta={'name': name}, callback=self.detail_parse, dont_filter=True)

# 解析下一页

next_link = response.xpath("//div[@class='article']//div[@class='paginator']//span[@class='next']/link/@href").extract()

print(next_link)

if next_link:

next_link = next_link[0]

yield scrapy.Request("https://movie.douban.com/top250" + next_link, callback=self.parse)

# 判断文件是否存在

# 不存在则创建

def fileIsBeing(self, name):

path = self.file_path + name

bool = os.path.exists(path)

if not(bool):

os.mkdir(path)

return path

# 解析详情里面的数据 获取二级页面内容操作。主要获取图片

def detail_parse(self, response):

name = response.meta['name']

print(name)

movie_prople_list = response.xpath("//div[@id='celebrities']//ul[@class='celebrities-list from-subject __oneline']//li")

for i_mov_item in movie_prople_list:

background_img = i_mov_item.xpath(".//div[@class='avatar']/@style").extract_first()

user_name = i_mov_item.xpath(".//div[@class='info']//a/@title").extract_first()

img_file_name = "%s.jpg" % user_name # 工作人员

img_url = self.txt_wrap_by('(', ')', background_img) # 图片地址

print(img_file_name)

file_path = os.path.join(self.file_path+name, img_file_name)

urllib.request.urlretrieve(img_url, file_path)

# print(img_file_name)

# 截取字符串中间部分

def txt_wrap_by(self, start_str, end, html):

start = html.find(start_str)

if start >= 0:

start += len(start_str)

end = html.find(end, start)

if end >= 0:

return html[start:end].strip()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
分布式爬虫是指通过多个节点同时运行爬虫程序,提高数据抓取的效率。scrapy-redis是一个用于实现分布式爬虫的Scrapy扩展库,它可以将爬取的URL任务队列存储在Redis中,从而实现多个节点之间的任务共享。 scrapy-redis的使用可以分为以下几个步骤: 1. 首先,我们需要在爬虫程序中引入scrapy_redis库,并将原来继承的scrapy.Spider类改为引入的RedisSpider类。这样就可以使用RedisSpider的功能了。 2. 其次,我们需要配置Redis连接信息,在settings.py文件中设置REDIS_HOST和REDIS_PORT参数,来连接Redis数据库。 3. 然后,在爬虫的start_urls中定义初始URL,这些URL将被添加到Redis队列中作为初始任务。可以使用redis-cli命令行工具来查看队列中的URL任务。 4. 接下来,我们可以使用scrapy_redis提供的调度器(Scheduler)和去重过滤器(DupeFilter)类来管理URL任务队列。调度器类scheduler.py用于调度URL任务,而去重过滤器类dupefilter.py用于去除重复的URL,避免重复抓取。 5. 最后,我们可以使用scrapy-redis提供的pipeline来存储抓取到的数据到MySQL数据库中。可以自定义一个Pipeline类,继承scrapy_redis.pipelines.RedisPipeline,并在settings.py文件中启用该Pipeline。 综上所述,分布式爬虫scrapy-redis与MySQL的使用包括引入scrapy_redis库、配置Redis连接信息、定义初始URL、使用调度器和去重过滤器管理URL任务队列,以及使用自定义的Pipeline将数据存储到MySQL数据库中。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [scrapy 分布式爬虫全集](https://download.csdn.net/download/bobbykey/10291995)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Scrapy基于scrapy_redis实现分布式爬虫部署](https://blog.csdn.net/weixin_29137997/article/details/113682107)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值