scrapy爬虫,爬取图片

scrapy爬虫,爬取图片

一、scrapy的安装:

本文基于Anacoda3,

Anacoda2和3如何同时安装?

将Anacoda3安装在C:\ProgramData\Anaconda2\envs文件夹中即可。

如何用conda安装scrapy?

安装了Anaconda2和3后,

 <span>scrapy爬虫,爬取图片</span>

 

如图,只有一个命令框,可以看到打开的时候:

 <span>scrapy爬虫,爬取图片</span>

 

可以切到Anaconda3对应的路径下即可。

安装的方法:cmd中:conda install scrapy即可。

当然,可能会出现权限的问题,那是因为安装的文件夹禁止了读写。可以如图:

<span>scrapy爬虫,爬取图片</span>

将权限都设为“允许“。

注意:此时虽然scapy安装上了,但是在cmd中输入scapy可能会不认,可以将安装scrapy.exe的路径添加到环境变量中。

 

二、scapy的简单使用

例子:爬取图片

1、 创建scrapy工程

譬如,想要创建工程名:testImage

输入:scrapy startproject testImage

即可创建该工程,按照cmd中提示的依次输入:

cd testImage

scrapy genspider getPhoto www.27270.com/word/dongwushijie/2013/4850.html

其中:在当前项目中创建spider,这仅仅是创建spider的一种快捷方法,该方法可以使用提前定义好的模板来生成spider,后面的网址是一个采集网址的集合,即为允许访问域名的一个判断。注意不要加http/https。

 

至此,可以在testImage\testImage\spiders中找到创建好的爬虫getPhoto.py,可以在此基础上进行修改。

2、创建爬虫

<span>scrapy爬虫,爬取图片</span>

如图,可以在图片的位置右键,检查,查看源码,在图片所在的位置处,将xpath拷贝出来。

此时,可以找出图片的地址:

class GetphotoSpider(scrapy.Spider):
    name = 'getPhoto'
    allowed_domains = ['www.27270.com']
    start_urls = ['http://www.27270.com/word/dongwushijie/2013/4850.html']
    def parse(self, response):
        urlImage = response.xpath('//*[@id="picBody"]/p/a[1]/img/@src').extract()
        print(urlImage)
        pass

  

此时,注意网络路径的正确书写,最后没有/,

http://www.27270.com/word/dongwushijie/2013/4850.html/   

此时将4850.html 当作了目录,会出现404找不到路径的错误!

3、 下载图片

items.py:

class PhotoItem(scrapy.Item):
    name = scrapy.Field()
    imageLink = scrapy.Field()

pipelines.py:

from scrapy.pipelines.images import ImagesPipeline
import scrapy
class ImagePipeline(ImagesPipeline):
    def get_media_requests(self,item,info):
        image_link = item['imageLink']
        yield scrapy.Request(image_link)

  

settings.py:

IMAGES_STORE = r”C:\Users\24630\Desktop\test”

另外,对于上面的网址,还需要ROBOTSTXT_OBEY = False

并且,访问该网址会出现302错误,这是一个重定向的问题,

MEDIA_ALLOW_REDIRECTS =True

设置该选项,就可以正确下载,但是下载的还是不对,问题不好解决。

当然在爬虫中,还要对items赋值:

from testImage import items
。。。

for urllink in urlImage:
      item = items.PhotoItem()
      item['imageLink'] = urllink

  

三、 进一步爬取(读取下一页)

# -*- coding: utf-8 -*-
import scrapy
from testImage import items
class GetphotoSpider(scrapy.Spider):
    name = 'getPhoto'
    allowed_domains = ['www.wmpic.me']
    start_urls = ['http://www.wmpic.me/93912']
    def parse(self, response):
        #//*[@id="content"]/div[1]/p/a[2]/img
        urlImage = response.xpath('//*[@id="content"]/div[1]/p/a/img/@src').extract()
        print(urlImage)
        for urllink in urlImage:
            item = items.PhotoItem()
            item['imageLink'] = urllink            
            yield item
            
            
        ifnext  = response.xpath('//*[@id="content"]/div[2]/text()').extract()[0] 
        # 当没有下一篇,即最后一页停止爬取
        if("下一篇" in ifnext):
            nextUrl = response.xpath('//*[@id="content"]/div[2]/a/@href').extract()[0]
            url=response.urljoin(nextUrl)
            yield scrapy.Request(url=url)

  此时,便可以看到路径下的下载后的文件了。(由于该网址每页的图片所在的xpath都不一样,故下载的图片不全)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119474.html原文链接:https://javaforall.net

(0)
上一篇 2021年11月19日 下午3:00
下一篇 2021年11月19日 下午3:00


相关推荐

  • java break continue用法_list和set的区别

    java break continue用法_list和set的区别1break用于完全结束一个循环,跳出循环体,执行循环后面的语句。2continue是跳过当次循环中剩下的语句,执行下一次循环。但其实这两句话看不出什么明显的意思,还是要通过写循环才能明白。先自己运算答案,然后分别对照正确答案。(一)执行continueMethod1(),结果应当是分析如下:i=0开始,i=7结束。(1)当i=0,接着条件判断false,执行“i=i+1”代码后,i=1,所以最后控制台输出1.第一轮循环结束(2)然后因为是for循环.

    2025年11月9日
    3
  • window10怎么提供管理员权限删除文件_如何用管理员权限删除文件

    window10怎么提供管理员权限删除文件_如何用管理员权限删除文件http://www.xitongcity.com/jiaocheng/win8_content_3473.html很多win8.1系统用户在对磁盘文件进行清理时,经常会遇到“文件夹访问被拒绝,您需

    2022年8月1日
    10
  • (20211130更新)关于jupyter notebook的下载安装及自己的配置、主题

    什么是jupyternotebook?JupyterNotebook是基于网页的用于交互计算的应用程序。其可被应用于全过程计算:开发、文档编写、运行代码和展示结果。打开的好慢。。没事,我们就不讲官网的了。JupyterNotebook以命令行启动后,以网页的形式打开,我们可以在网页页面中直接编写代码和运行代码,运行代码块后,运行结果会直接在代码块下显示。比如这样:当然我们在编程过程中会习惯的编写注释,可在同一个页面中直接编写。安装由于时间关系,我就先讲解一下本人的安装及使用,关于

    2022年4月13日
    51
  • lea 指令_lea指令的功能

    lea 指令_lea指令的功能leaw#2个字节leal#4个字节leaq#8个字节leabase_address(offset_address,index,size),%rax根据括号里的源操作数来计算地址,然后把地址加载到目标寄存器中。计算地址base_address+offset_address+index*size,然后把最终地址载到寄存器rax中。lea不引用源操作数里的寄存器,只是单…

    2025年6月30日
    4
  • #1032 : 最长回文子串

    #1032 : 最长回文子串#1032:最长回文子串时间限制:1000ms单点时限:1000ms内存限制:64MB描述   小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进。   这一天,他们遇到了一连串的字符串,于是小Hi就向小Ho提出了那个经典的问题:“小Ho,你能不能分别在

    2022年6月3日
    32
  • Google资深工程师深度讲解Go语言-http及其他标准库(十一)「建议收藏」

    Google资深工程师深度讲解Go语言-http及其他标准库(十一)

    2022年2月16日
    45

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号