前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python爬虫Scrapy框架爬取小红书图片频道

python爬虫Scrapy框架爬取小红书图片频道

原创
作者头像
Paulette
发布2023-07-09 21:38:56
7480
发布2023-07-09 21:38:56
举报
文章被收录于专栏:小白实例小白实例

在spiders目录中新建`img_spider.py`文件,来实现我们的爬虫。首先导入需要的模块:

代码语言:javascript
复制
python
import scrapy
from scrapy.http import Request

然后定义爬虫类ImgSpider,继承Scrapy的Spider类:

代码语言:javascript
复制
python
class ImgSpider(scrapy.Spider):
  name = 'img'
  allowed_domains = ['xiaohongshu.com']

在`start_requests`方法中构造初始请求,爬取小红书的图片频道:

代码语言:javascript
复制
python
  def start_requests(self):
    start_url = 'https://www.xiaohongshu.com/explore?channel_id=homefeed.fashion_v3'
    yield Request(url=start_url, callback=self.parse)

解析函数`parse`里面提取图片链接并递归爬取:

代码语言:javascript
复制
python
def parse(self, response):
  img_urls = response.xpath('//img[@class="lazied"]/@data-src').getall()
  
  for url in img_urls:
    yield Request(url, callback=self.img_parse)
  
  # 递归爬取下一页
  next_page = response.xpath('//a[@class="next"]/@href').get()
  if next_page:
    yield Request(url=next_page, callback=self.parse)

在`img_parse`里面下载图片:

代码语言:javascript
复制
python
def img_parse(self, response):
  img_name = response.url.split("/")[-1]
  with open(img_name, 'wb') as f:
    f.write(response.body)

我们可以通过管道将图片保存到指定目录中。在`pipelines.py`中编写管道:

代码语言:javascript
复制
python
class ImgPipeline(object):
  def process_item(self, item, spider):
    img_name = item['img_name']
    img_data = item['img_data']
      
    with open(f'images/{img_name}', 'wb') as f:
      f.write(img_data)

并在settings.py中启用:

代码语言:javascript
复制
python
ITEM_PIPELINES = {
  'xiaohongshu.pipelines.ImgPipeline': 300,
}

最后我们运行爬虫,它将递归爬取小红书中的图片:

代码语言:javascript
复制
scrapy crawl img

Scrapy会按照我们定义的逻辑,先爬取首页,提取图片链接,然后发送图片链接请求,获取图片数据后保存。循环往复直到爬取完指定范围内的页面。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档