之前在写爬虫时,都是自己写整个爬取过程,例如向目标网站发起请求、解析网站、提取数据、下载数据等,需要自己定义这些实现方法等

这个周末把之前买的一个scrapy爬虫课程翻了出来(拉钩教育《52讲轻松搞定网络爬虫》,有兴趣的可以去看看),初步学习了一下scrapy的使用方法,刚好把以前写好的一个爬虫用scrapy改造一下,加深学习印象,也好做个对比

本次爬取的网站仍然是图片素材网站:

https://imgbin.com/free-png/water

之前的爬虫过程如下:

https://www.cnblogs.com/hanmk/p/12747093.html

scrapy官方文档:

https://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/overview.html

接下来使用scrapy来爬取该网站的图片素材,本节的目标是:提取图片的下载url,并且只提取第一页,暂时不做后续处理

1. 网站分析

如上,一个图片占用一个div标签,定位到div下的img标签,然后提取 data-original属性的内容即可  因为这次只提取这一页的图片,所以可以先不考虑翻页导致url的变化(后续会逐步完善)

2. 新建一个scrapy项目

打开cmd命令行窗口或者打开pycharm并切换到Terminal终端,任意切换到一个目录,然后输入如下命令

scrapy startproject imgbin

3. 新建一个spider

进入刚刚创建好的项目目录,执行如下命令

scrapy genspider images imgbin.com

完成上述步骤后,会得到如下工程文件目录

4. 编辑items.py

import scrapyclass ImgbinItem(scrapy.Item):    # define the fields for your item here like:    # name = scrapy.Field()    img_src = scrapy.Field()

因为我只需要提取图片下载链接,所以这里也只定义了一个字段用来存储提取到的图片url

5. 编写spider文件,解析response

import scrapyfrom scrapy import Requestfrom imgbin.items import ImgbinItemclass ImagesSpider(scrapy.Spider):    name = 'images'    allowed_domains = ['imgbin.com']    start_urls = ['http://imgbin.com/']    def start_requests(self):        base_url = "https://imgbin.com/free-png/naruto"        yield Request(url=base_url, callback=self.parse)    def parse(self, response):        images = response.xpath("//img[@class='photothumb lazy']")        for image in images:            item = ImgbinItem()            item["img_src"] = image.xpath("./@data-original").extract_first()            yield item

(1) 首先导入了 Request 模块以及定义好的 ImgbinItem

(2) ImagesSpider类下有3个属性

  • name: 用于区别Spider,该名字必须是唯一的,也可以为不同的Spider设定相同的名字;

  • allowed_domains:允许爬取的域名,如果初始或后续的请求链接不是这个域名下的,则请求链接会被过滤掉;

  • start_urls: 包含了Spider在启动时进行爬取的url列表,如果当没有定义 start_requests() 方法,默认会从这个列表开始抓取;

(3) 定义了 start_requests()方法

(4) 完善parse()方法

parse() 是spider的一个方法。被调用时,每个初始URL完成下载后生成的 Response 对象将会作为唯一的参数传递给该函数。该方法负责解析返回的数据(response data),提取数据(生成item)以及生成需要进一步处理的URL的 Request 对象。

images=response.xpath("//img[@class='photothumb lazy']"),使用xpath方式提取所有class属性为 photothumb lazy 的img标签,并将其赋给变量images;item["img_src"]=image.xpath("./@data-original").extract_first(),利用for循环遍历所有images标签,并逐个提取内部的图片下载链接,并赋值给item中的"img_src"字段。

注意"./@data-original",表示提取当前img标签里面的数据;yield item,将最后的item对象返回

这样,第一页的所有图片的下载链接就都提取出来了

6. 运行查看结果

打开cmd窗口,进入项目目录,执行以下命令

scrapy crawl images

结果如下,打印出了一个个图片下载链接

将结果存储到json文件中

scrapy crawl images -o img.json

相对于之前不用scrapy框架来说,代码量少了许多,只需要写好元素提取规则就好了

喜欢记得来一个

data标签怎么爬虫_scrapy爬虫笔记(1):scrapy基本使用相关推荐

  1. python scrapy框架爬虫_Scrapy爬虫框架教程(一)-- Scrapy入门

    前言 转行做python程序员已经有三个月了,这三个月用Scrapy爬虫框架写了将近两百个爬虫,不能说精通了Scrapy,但是已经对Scrapy有了一定的熟悉.准备写一个系列的Scrapy爬虫教程,一 ...

  2. php 爬虫_Scrapy 爬虫完整案例-基础篇

    1 Scrapy 爬虫完整案例-基础篇 1.1 Scrapy 爬虫案例一 Scrapy 爬虫案例:爬取腾讯网招聘信息 案例步骤: 第一步:创建项目. 在 dos下切换到目录 D:爬虫_scriptsc ...

  3. 爬虫期末考试笔记(选择题)

    常用获取数据的方式? 企业产生的数据 数据平台购买的数据 政府.机构公开的数据 数据管理公司的数据 爬虫的概念? 网络爬虫又称为网页蜘蛛.网络机器人是一种按照一定的规则自动请求万维网网站并提取网络数据 ...

  4. Python 网络爬虫笔记10 -- Scrapy 使用入门

    Python 网络爬虫笔记10 – Scrapy 使用入门 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接: ...

  5. 【Python笔记】网络爬虫——常用框架介绍以及 Scrapy 框架使用

    网络爬虫开发常用框架 Scrapy 爬虫框架 Crawley 爬虫框架 PySpider 爬虫框架 Scrapy 爬虫框架的使用 搭建 Scrapy 爬虫框架 1. 安装 Twisted 模块 2. ...

  6. scrapy微博反爬虫_Scrapy 爬取新浪微博(解析api)

    python爬虫学习笔记... 本文采用m.weibo.cn站点完成抓取,通过分析api提取数据,数据存储在MongoDB中. 爬虫文件 # -*- coding: utf-8 -*- import ...

  7. colly爬虫库学习笔记

    colly爬虫库学习笔记 前言 稍微的学习了一下Go语言的基础知识(错误处理和协程通道这些还没看),想着能不能做点东西,突然想到自己当时学了python之后就是专门为了写爬虫(虽然后来也咕了,只会一个 ...

  8. Python网络爬虫与信息提取笔记08-实例2:淘宝商品比价定向爬虫

    Python网络爬虫与信息提取笔记01-Requests库入门 Python网络爬虫与信息提取笔记02-网络爬虫之"盗亦有道" Python网络爬虫与信息提取笔记03-Reques ...

  9. python爬虫(上课笔记)

    爬虫概述 爬虫:网络爬虫是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.其本质就是通过编写程序拟浏览器上网,抓取数据的过程. 爬虫特点 在法律中都是不被禁止的: 具有违法风险: 爬虫是一个博 ...

  10. Python网络爬虫与信息提取笔记(续篇)(文末附教学视频)只供教学讲解,请勿对有robots协议的网站(如淘宝网)造成骚扰

    接上篇博客:Python网络爬虫与信息提取笔记(文末附教学视频) 14:基于bs4库的HTML内容遍历方法 标签树的下行遍历: 用len(soup.body.contents)返回body标签的儿子节 ...

最新文章

  1. UVa1587 Box(排序)
  2. js里面字符数字和数字相加_「译」5 个奇怪的只会在 JS 里才发生的趣事
  3. 操作系统(李治军) L11内核级线程
  4. Docker Flie
  5. 【iOS开发-35】有了ARC内存管理机制,是否还须要操心内存溢出等问题?——面试必备...
  6. Oracle 过程(Procedure)、函数(Function)、包(Package)、触发器(Trigger)
  7. Java中将List转成逗号数组的方案
  8. Web页面的生命周期函数
  9. 输入九九乘法表c语言,九九乘法表的输入(c语言)
  10. 微波雷达感应开关,雷达感应智能模块,照明节能环保技术应用
  11. 游戏动画入门课程之软件视图操作
  12. UI设计师应聘面试攻略看这篇就够了
  13. NIOS II使用经验
  14. VS2010:X64和X86冲突问题
  15. qt在window实现二维码识别
  16. Latex/CTeX WinEdt7.0 连续查找替换功能 “如何统计字数”
  17. LUMI 超算计算机目前组装过程
  18. java svfrclient.jar_jp.co.fit.vfreport.SvfrClient.dll,下载,简介,描述,修复,等相关问题一站搞定_DLL之家...
  19. 数据之道读书笔记-06面向“自助消费”的数据服务建设
  20. OBS云插件,智播,智慧主播最佳选择

热门文章

  1. Atitit httpclient 概述  rest接口
  2. atitit 体系搭建的方法 解决方案 attilax总结.docx
  3. Atitit  ocr识别原理 与概论 attilax总结
  4. paip.提升用户体验---c++ qt 悬浮窗实现
  5. paip.提升开发效率之查询界面
  6. 美国ESG基金发展概览【天风金工吴先兴团队】
  7. 支付那些事儿III---一个BD汪眼中的产品I
  8. (转)探寻区块链的源头——“重回拜占庭”
  9. 云计算摆摊的可行性分析 | 凌云时刻
  10. php 根目录怎么写,php – 如何重写根目录中的目录