IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 一个完整的scrapy爬取图片示例-及简要知识点 -> 正文阅读

[Python知识库]一个完整的scrapy爬取图片示例-及简要知识点

1.创建爬虫项目,在指定文件夹的命令窗口下运行
scrapy startproject cnblogspider
项目结构如下
在这里插入图片描述

2.添加item
代码如下

import scrapy


class CnblogspiderItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    url=scrapy.Field()
    cimage_urls=scrapy.Field()
    cimage=scrapy.Field()
    image_paths=scrapy.Field()

3.创建spider,在创建的项目文件夹命令窗口下执行
scrapy genspider cnblog cnblogs.com
产生爬虫
然后重写start_urls和parse方法
其中Request为scrapy自带的一个类,项目中用到直接实例化
全部代码如下

import scrapy
from cnblogspider.items import CnblogspiderItem
from scrapy import Request,Selector


class CnblogSpider(scrapy.Spider):
    name = 'cnblog'
    allowed_domains = ['cnblogs.com']
    # start_urls = ['http://cnblogs.com/qiyeboy/default.html?page=1']
    start_urls = ['http://cnblogs.com/qiyeboy/default.html?page=1']

    def parse(self, response):
        # 实现网页的解析
        # 首先抽取所有的文章
        papers=response.xpath(".//*[@class='day']")
        # 从每篇文章中抽取数据
        for paper in papers:
            url = paper.xpath(".//*[@class='postTitle']/a/@href").extract_first()
            # title = paper.xpath(".//*[@class='postTitle']/a/span/text()").extract()[0]
            # time = paper.xpath(".//*[@class='dayTitle']/a/text()").extract()[0]
            # content = paper.xpath(".//*[@class='postTitle']/a/span/text()").extract()[0]
            # print('%s,%s,%s,%s'%url%title%time%content)
            # print(f'{url}{title}{time}{content}')
            # item=CnblogspiderItem(url=url,title=title,time=time,content=content)
            item = CnblogspiderItem(url=url)
            request=scrapy.Request(url=url,callback=self.parse_body)
            # 将item暂存
            request.meta['item']=item
            yield request
            next_page=Selector(response).re(u'<a href="(\s*)">下一页</a>')
            if next_page:
                yield scrapy.Request(url=next_page[0],callback=self.parse)
    def parse_body(self,response):
        item=response.meta['item']
        body=response.xpath(".//*[@class='postBody']")
        # 提取图片链接
        item['cimage_urls']=body.xpath('.//img//@src').extract()
        yield item


4.构建item pipeline存储下载的图片
因为是存储图片所以要用到MediaPipline中的ImagesPipeline
以及设置settings
4.1 要存储到指定的路径下所以重写get_media_requests(item,info)方法和item_completed(results,items,info)方法
其中get_media_requests方法中要用到item的cimage_urls字段
item_completed方法中要用到item的image_paths字段
具体代码如下:

from itemadapter import ItemAdapter
from scrapy.exceptions import DropItem
import scrapy
from scrapy.pipelines.images import ImagesPipeline


class MyImagesPiplines(ImagesPipeline):
    def get_media_requests(self, item, info):
        for image_url in item['cimage_urls']:
            yield scrapy.Request(image_url)
    def item_completed(self, results, item, info):
        image_paths=[x['path'] for ok,x in results if ok]
        if not image_paths:
            raise DropItem('item contains no image')
        item['image_paths']=image_paths
        return item

4.2设置settings,
4.2.1 因为不能用scrapy初始的user_agent,所以要激活USER_AGENT,并添加自己浏览器的user_agent
代码如下:

USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36'

4.2.2 激活Pipeline
代码如下

```python
ITEM_PIPELINES = {
   # 'cnblogspider.pipelines.CnblogspiderPipeline': 300,
    'cnblogspider.pipelines.MyImagesPiplines': 301,
}

4.2.3
其他项目为固定项目,根据实际需要设置即可
其中
IMAGES_STORE为文件存储路径字段
IMAGES_URL_FIELD问文件url所在item字段
IMAGES_RESULT_FIELD为文件结果信息所在item所在字段
IMAGES_EXPIRES为文件过期时间(天)
IMAGES_THUMBS制作图片缩略图,并设置缩略图大小
具体代码如下

IMAGES_STORE='D:\\cnblogs'
IMAGES_URL_FIELD='cimage_urls'
IMAGES_RESULT_FIELD='cimages'
IMAGES_EXPIRES=30
IMAGES_THUMBS={
    'small':(50,50),
    'big':(270,270),
}

5.运行爬虫
在项目所在文件夹命令窗口下运行命令
scrapy crawl cnblog
-在这里插入图片描述

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-01-14 01:55:36  更:2022-01-14 01:56:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 3:51:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码