爬虫之Scrapy框架爬取彼岸壁纸案例分享

news/2024/11/29 12:55:18/

爬虫之Scrapy框架爬取彼岸壁纸案例分享

前段时间在网上看到有人爬取了彼岸壁纸的案例,由于爬取的图片较多,爬取速度感觉不快,所以就自己写了个Scrapy框架,个人觉得爬取速度快多了。
代码如下。


文章目录

  • 爬虫之Scrapy框架爬取彼岸壁纸案例分享
  • 一、建立Scrapy项目
  • 二、建立启动文件start
  • 三、 设置settings
  • 四、在spiders中建立爬取逻辑
  • 五、 在管道pipelines中保存图片
  • 结果展示
  • 总结

一、建立Scrapy项目

在终端输入以下代码建立scrapy框架

scrapy startproject bianwallpaper
cd wallpaper
scrapy genspider bian netbian.com

二、建立启动文件start

建立启动文件的目的是为了避免繁琐的终端输入命令,提高效率

from scrapy import cmdlinecmdline.execute(['scrapy', 'crawl', 'bian'])

三、 设置settings

在settings文件中进行相关设置,以便顺利的爬取网站和使用管道
1.设置LOG_LEVELl等级并关闭ROBOTSTEXT协议,注意:必须全部为大写

在这里插入图片描述
2. 设置headers
在这里插入图片描述
3. 打开管道pipelines
在这里插入图片描述

四、在spiders中建立爬取逻辑

import scrapy
import osclass BianSpider(scrapy.Spider):name = 'bian'allowed_domains = ['netbian.com']url = 'http://www.netbian.com/{}/index{}.htm'category = ['rili', 'dongman', 'fengjing', 'meinv', 'youxi', 'yingshi', 'dongtai', 'weimei', 'sheji', 'keai', 'qiche', 'huahui', 'dongwu', 'jieri', 'renwu', 'meishi', 'shuiguo', 'jianzhu', 'tiyu', 'junshi', 'feizhuliu', 'qita', 'wangzherongyao', 'huyan', 'lol']page_num = int(input('请输入要爬取的页码数(输入0表示爬取总页数):'))page_index0 = ''i = 0j = 1start_urls = [url.format(category[i], page_index0)]def parse(self, response):# 建立目标文件夹,用来保存图片dir_path = f'D:\\python-course\\practice2\\彼岸壁纸\\{self.category[self.i]}'if not os.path.exists(dir_path):os.mkdir(dir_path)# 获取每个分类的总页数if self.page_num == 0:total_pages = int(response.xpath('//div[@class="page"]/a/text()').extract()[-2])self.page_num = total_pagesli_lst = response.xpath('//div[@class="list"]/ul/li')for li in li_lst:item = {}title = li.xpath('a/b/text()').extract_first()href = li.xpath('a/@href').get()if title:item['title'] = title  # 获取图片对应的标题item['href_url'] = response.urljoin(href)  # 获取下一级的url,以便爬取分辨率更高的壁纸item['save_dir'] = dir_pathyield scrapy.Request(url=item['href_url'],callback=self.parse_href_url,meta={'item': item})# 过滤掉没用的图片网址else:continue# 判断是否爬取完某一分类所需的所有壁纸,爬取完后开始爬取下一分类的壁纸if self.j < self.page_num:self.j += 1self.page_index = self.page_index0self.page_index += '_' + str(self.j)next_url = f'http://www.netbian.com/{self.category[self.i]}/index{self.page_index}.htm'yield scrapy.Request(url=next_url)print('开始爬取下一页内容。。。')else:self.i += 1if self.i < len(self.category):self.j = 1new_url = self.url.format(self.category[self.i], self.page_index0)yield scrapy.Request(url=new_url)print(f'开始爬取{self.category[self.i]}的内容。。。')def parse_href_url(self, response):item = response.meta['item']item['img_src'] = response.xpath('//div[@class="pic"]/p/a/img/@src').get()  # 获取到所需的图片urlyield item

五、 在管道pipelines中保存图片

import urllib.requestclass BianwallpaperPipeline:count = 0def process_item(self, item, spider):print(item['img_src'])self.count += 1print(self.count)urllib.request.urlretrieve(item['img_src'], item['save_dir']+f'\\{item["title"]}{self.count}.png')  # 保存文件return item

结果展示

在这里插入图片描述

总结

scrapy爬取数据确实要比一般的方法快很多,尤其在爬取的内容非常多时。但是,个人觉得scrapy使用起来也是挺繁琐的,需要不停的切换文件来进行调试。总之,如果不是爬取的内容太多,我还是会选择用普通方法来爬取。


http://www.ppmy.cn/news/841638.html

相关文章

全套英雄联盟系列壁纸,确定不来了解一下?

前言 我曾踏足山巅,也曾跌落低谷,二者都让我受益良多 最近喜欢在文章前面加入联盟的壁纸,一是为了填充内容,不显得内容干燥,二是这些壁纸看起来确实很帅哈哈 于是花了点时间找了些LOL的壁纸网站,最终锁定了https://lolskin.cn/ 英雄联盟皮肤站,看了下这个站还是很不错的…

python随机爬取wallhaven壁纸url(获取随机图片url)

01 代码清单 class get_random_wallhaven(object):def __init__(self, url https://wallhaven.cc/random):self.init_url urldef getHTMLText(self, url):import urllib3headers {User -Agent : Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Geck…

deepin切换壁纸小工具

切换壁纸小工具(python脚本) 切换壁纸这种事,找到接口,一行代码就可以解决,本来打算用bash脚本,但是考虑到随机选取壁纸等因素,用python的os模块完成任务。 一、思路 找到切换壁纸的接口设置壁纸库(文件夹)python脚本完成功能半小时自动切换壁纸二、实现过程 1、切…

JAVA爬虫---LOL各英雄图片(含皮肤)下载

pom依赖 <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.2</version></dependency><dependency><groupId>com.alibaba</groupId><artifact…

利用Scrapy框架爬取LOL皮肤站高清壁纸

利用Scrapy框架爬取LOL皮肤站高清壁纸 Lan 2020-03-06 21:22 81 人阅读 0 条评论 成品打包&#xff1a;点击进入 代码&#xff1a; 爬虫文件 # -*- coding: utf-8 -*- import scrapy from practice.items import PracticeItem from urllib import parseclass LolskinSpider(s…

我用Python一键爬取了:所有LOL英雄皮肤壁纸!

人生苦短&#xff0c;快学Python&#xff01; 今天是教使用大家selenium&#xff0c;一键爬取LOL英雄皮肤壁纸。 第一步&#xff0c;先要进行网页分析 一、网页分析 进入LOL官网后&#xff0c;鼠标悬停在游戏资料上&#xff0c;等出现窗口&#xff0c;选择资料库&#xff0c;…

python爬取千图网_python爬取lol官网英雄图片代码

python爬取lol官网英雄图片代码可以帮助用户对英雄联盟官网平台的皮肤图片进行抓取&#xff0c;有很多喜欢lol的玩家们想要官方的英雄图片当作自己的背景或者头像&#xff0c;可以使用这款软件为你爬取图片资源&#xff0c;操作很简单&#xff0c;设置一些保存路径就可以将图片…

抓取 LOL 官网墙纸实现

闲来无事&#xff08;蛋疼&#xff09;&#xff0c;随手实现了下 Controller 代码 <?php namespace App\Http\Controllers\Image;use App\Http\Controllers\Controller; use Illuminate\Filesystem\Filesystem as Fs;class ImageController extends Controller {public sta…