1、创建项目

scrapy startproject bizhi

2、创建爬虫

scrapy genspider bizhispider www.netbian.com
要爬取的壁纸网站 网址域名www.netbian.com

3、编写前的一些准备

启动脚本

新建Python文件run.py

from scrapy import cmdlinecmdline.execute('scrapy crawl bizhispider'.split())

设置日志输出水平

进入settings.py文件

LOG_LEVEL = 'WARNING'  # 讲日志的输出水平设置为警告水平。scrapy crawl 输出的日志太多看着难受

不设置的日志输出(下图)太多太乱看着不方便不好找重点,设置后只有警告以上级别的输出才会打印出来(警告、错误等)

关闭robots协议

进入settings.py设置

ROBOTSTXT_OBEY = False  # 这个协议在书面上规定了爬虫可爬取的内容范围(只是一种口头约定,没有用技术手段限制),可以到网址的根目录下+/robots.txt查看

设置请求头

进入settings.py设置

USER_AGENT = ' Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36'

编写爬虫spider

思路:首先分析页面,网页下面有页码因此我们要一页页的爬取肯定得有翻页操作。通过连续观察几个页面这个页面的结构是类似的,我们只需要分析好一个页面讲一个页面的图片爬完后进行翻页操作再以同样的方法爬取下一页就可以了。

图1

大概思路有了就开干。首先分析一个页面爬取一个页面中的壁纸。爬取红色框中的壁纸,通过xpath将此部分选择出来,得到各个壁纸对应的二级页面链接(二级页面 点击图2中的任一个壁纸进入这个壁纸的下载页面图3)。

图 2

图3
通过xpath找到图片url进行下载。
(xpath可以看这篇文章)

import scrapy
from scrapy import Request
import requestsclass BizhispiderSpider(scrapy.Spider):name = 'bizhispider'  # 爬虫名称shulian = 0#allowed_domains = ['netbian.com/']  # 允许爬取的范围,给注释了不然二次请求的时候由于二次请求的网址不在允许的范围不能正确运行。另一种方法,还可以在Rquest请求时加入dont_filter参数表示不对链接去重同时不受规定的范围限制。start_urls = ['http://www.netbian.com//']  # 爬取的网址def parse(self, response):hrefs = response.xpath('//*[@id="main"]/div/ul/li/a/@href').extract()  # 爬取出第一幅图的红框部分得到每张壁纸的二级页面的链接(二级页面的url)。for href in hrefs[:-1]:  # 遍历每个二级页面进行壁纸下载(最后一个链接为下一页,链接不要(看图1))url = response.urljoin(href)yield Request(url=url, callback=self.delwith)  # 将壁纸的url用生成器抛出,用delwith下载图片next_page = response.xpath("//div[@class='page']/a[@class='prev']/@href").extract()  # 获取下一页链接next_page = response.urljoin(next_page[-1])  # 拼接链接yield Request(url=next_page)  # 进行翻页操作def delwith(self,response):  # 下载图片src = response.xpath('//*[@id="main"]/div[3]/div/p/a/img/@src').extract_first()name = response.xpath('//*[@id="main"]/div[3]/div/p/a/img/@title').extract_first()image = requests.get(src)with open('/home/lmx/python/paqubianbizhi/bizhi/images/'+name+'.jpg','wb') as file:file.write(image.content)print(name+'下载完成')  # 每下载一张提示一下

4、爬取的图片截图

scrapy 爬取壁纸相关推荐

  1. 用Scrapy爬取分析了7万款App,结果万万没想到!

    作者 | 苏克 来源 | 第2大脑 这是新年的第一篇原创干货. 摘要:使用 Scrapy 爬取豌豆荚全网 70,000+ App,并进行探索性分析. 写在前面:若对数据抓取部分不感兴趣,可以直接下拉到 ...

  2. 以豌豆荚为例,用 Scrapy 爬取分类多级页面

    本文转载自以下网站:以豌豆荚为例,用 Scrapy 爬取分类多级页面 https://www.makcyun.top/web_scraping_withpython17.html 需要学习的地方: 1 ...

  3. Scrapy 爬取 分析了 7 万款 App,全是没想到

    摘要:使用 Scrapy 爬取豌豆荚全网 70,000+ App,并进行探索性分析. 写在前面:若对数据抓取部分不感兴趣,可以直接下拉到数据分析部分. 1 分析背景 之前我们使用了 Scrapy 爬取 ...

  4. 【爬虫】Scrapy爬取腾讯社招信息

    目标任务:爬取腾讯社招信息,需要爬取的内容为:职位名称,职位的详情链接,职位类别,招聘人数,工作地点,发布时间. 一.预备基础 1.Scrapy简介 Scrapy是用纯Python实现一个为了爬取网站 ...

  5. Python scrapy爬取京东,百度百科出现乱码,解决方案

    Python scrapy爬取京东 百度百科出现乱码 解决方案 十分想念顺店杂可... 抓取百度百科,出现乱码 把页面源码下载下来之后,发现全是乱码,浏览器打开 但是浏览器链接打开就没有乱码 以下是浏 ...

  6. Scrapy爬取姓名大全,看看那个名字最受父母青睐

    点击上方"AI搞事情"关注我们 最近在做的项目需要用到名字的数据,可哪儿有这么多名字给我用呢?经一通搜索,不仅找到一个神奇的网站姓名大全,还有人开源了爬虫的代码.让我一番修改,得到 ...

  7. 四十三、Scrapy 爬取前程无忧51jobs

    @Author:Runsen 之前爬了拉钩,爬了boss ,你认为我会放过51jobs 吗 这是不可能的,今日用下scrapy 来爬 51jobs,前程无忧 关于新建项目和spider 不说了,今日用 ...

  8. 四十一、完成scrapy爬取官方网站新房的数据

    @Author:Runsen 文章目录 前言 分析网页 新建项目 加请求头 搞定item 首页调试 详情页调试 保存json 前言 在前几天,接到一个大学生的作业的爬虫单子,要求采用scrapy爬取链 ...

  9. 如何用 Python + Scrapy 爬取视频?

    今天将带大家简单了解Scrapy爬虫框架,并用一个真实案例来演示代码的编写和爬取过程. 一.scrapy简介 1. 什么是Scrapy Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框 ...

最新文章

  1. python urllib2 开启调试
  2. 漫谈强化学习中的引导搜索策略
  3. java jpanel调用构造函数的时候就开始执行repaint_在Java Swing组件中劫持`repaint()`调用...
  4. linux-数据库篇-索引
  5. IIS 故障一例(XP更新补丁后)
  6. AOJ0028 Mode Value【出现次数最多+map+vector+水题】
  7. 中国IP库(2022年最新版-包含港澳台地区)
  8. si446使用记录(一):基本资料获取
  9. 【转】MapGIS K9基础系列(二)
  10. 《失业的程序员》(十二):潜意识的智商
  11. 别在找提高C++晦涩难懂的知识了。提高效率!这里有C++STL——全面总结详细教程(附案例解析)(持续更新中)
  12. Java开心农场源码Java欢乐农场源码
  13. Python实现QQ定时回复(附源码exe)
  14. 摄影师眼中的爱情(完整版)▒┣
  15. 线程通信,生产者消费者问题案例,模拟来电提醒和接听电话
  16. jsvascript === 和==的区别
  17. hpux- hp superdome9000 日常硬件故障处理总结
  18. Cause: java.lang.IllegalArgumentException: Result Maps collection already contains value for com.cor
  19. 金刚经知识地图(上)
  20. Python os._exit() sys.exit() exit()区别

热门文章

  1. uniapp如何使用微信小程序的订阅信息推送消息给用户?
  2. 通俗理解数学符号 “∫”,“d“,“e”
  3. SSL证书信任问题处理,两种解决方案
  4. 工作笔记::VSCode使用笔记--VSCode 设置自定义快捷键 设置自定义运行脚本
  5. arcgis server 服务发布搭建总流程(以本机作为服务器)
  6. git extensions linux,GitExtensions 在 Ubuntu 下的配置
  7. 2013年1月16日 OutOfMemory.CN 进展
  8. uni-app小程序onShow执行两次;微信小程序onShow重复执行原因;导航栏tabBar页的onLoad函数不执行;App.vue页的onShow执行原因;onShow莫名其妙执行
  9. 安全联网设备客户端登录
  10. linux下使用c语言模拟tail [-n] 命令