scrapy图片-爬取哈利波特壁纸

news/2024/7/19 11:37:08 标签: python, 爬虫

话不多说,直接开始,直接放上整个程序过程

1、创建工程和生成spiders就不用说了,会用scrapy的都知道。

2、items.py

class HarryItem(scrapy.Item):
    # define the fields for your item here like:
    img_url = scrapy.Field()
    img_name = scrapy.Field()

 

3、pipelines.py

    

import os
from  harry.settings import IMAGES_STORE as IMGS
from scrapy.pipelines.images import ImagesPipeline
from scrapy import Request
class HarryPipeline(object):
    def process_item(self, item, spider):
        return item
class HarryDownLoadPipeline(ImagesPipeline):
    def get_media_requests(self, item, info):
        for imgurl in item['img_url']:
            yield Request(imgurl)
#以下代码为自定义图片名称的新增代码
#    def item_completed(self, results, item, info):
#        print ('******the results is********:',results)
#        os.rename(IMGS + '/' + results[0][1]['path'], IMGS + '/' + item['img_name'])
#    def __del__(self):
#            #完成后删除full目录
#            os.removedirs(IMGS + '/' + 'full')    

 

4、settings.py

BOT_NAME = 'harry'
SPIDER_MODULES = ['harry.spiders']
NEWSPIDER_MODULE = 'harry.spiders'
ROBOTSTXT_OBEY = False
IMAGES_URLS_FIELD = "img_url"  # 对应item里面设定的字段,取到图片的url
IMAGES_STORE = 'E:/harrypotter'
ITEM_PIPELINES = {
    'harry.pipelines.HarryDownLoadPipeline': 300,
}

 

5、最主要的爬虫组件hr.py

# -*- coding: utf-8 -*-
import scrapy
from  harry.items import HarryItem
from scrapy import Request

class HrSpider(scrapy.Spider):
    name = 'hr'
    allowed_domains = ['www.ivsky.com']
    sts=[]
    st='http://www.ivsky.com/bizhi/harry_potter5_v3477/pic_1018'
    for x in range(6,24):
        if x<10:
            sts.append(st+'0'+str(x)+'.html')
        else:
            sts.append(st+str(x)+'.html')
    start_urls = sts

    def parse(self, response):
        item=HarryItem()
        urls=response.xpath('//div[@id="pic_con"]/div/img[@id="imgis"]/@src').extract()
    
names=response.xpath('//div[@id="pic_con"]/div/img[@id="imgis"]/@src').extract()[0].split('/')[-1]

      item['img_name']=names

      print ('links is :--','\n',urls)

        item['img_url']=urls
        yield item

 

6、执行爬虫

  进入到工程路径,比如我的是harry这个路径中,执行 scrapy crawl hr     #hr 是我设置的爬虫名称

7、总结

  此次爬虫,有两方面的小收获。

   收获①这个网站的网页设置很奇怪,用google浏览器F12打开看到图片链接结构是div/div/a/img/@src,但用 这个结构去爬取,发现链接都是空的(这也就是我的spiders中故意设置一  行print ('links is :--','\n',urls)的原因了,可以看到爬取过程的log,图片链接有没有正常爬取到)。所以直接邮件查看网页源代码,发现了猫腻,以下两张图片做对比可以发现实际只有div/div/img/@src这个结构才能真正获取到图片链接。怀疑是网站的程序猿将tag搞错<img> 和</a>配对了,在“查看网页源代码”可以看到是这样。

图片一:F12查看的结构

图片二、右键“查看网页源代码”

 

   收获②

如果有些网页是类似下面数字翻页的,而且下一页中的链接不容易提取到的,那么可以用以下将要爬取的图片页面链接全部放置在start_urls这个list中
www.ivsky.com/bizhi/harry_potter5_v3477/pic_101808.html
www.ivsky.com/bizhi/harry_potter5_v3477/pic_101809.html
www.ivsky.com/bizhi/harry_potter5_v3477/pic_101811.html

class HrSpider(scrapy.Spider):
    name = 'hr'
    allowed_domains = ['www.ivsky.com']
    sts=[]
    st='http://www.ivsky.com/bizhi/harry_potter5_v3477/pic_1018'
    for x in range(6,24):
        if x<10:
            sts.append(st+'0'+str(x)+'.html')
        else:
            sts.append(st+str(x)+'.html')
    start_urls = sts

 

欢迎大家留言讨论,转载请注明出处。

 

转载于:https://www.cnblogs.com/mrtop/p/10180072.html


http://www.niftyadmin.cn/n/783254.html

相关文章

php百度地图图层,baidu地图API叠加自定义图层(一)

我在这里实现的是在baidu地图上叠加geoserver的WMS图层&#xff0c;代码如下&#xff1a;body, html, #allmap {width: 100%;height: 100%;overflow: hidden;margin: 0;}var map;var icon new BMap.Icon(img/center.gif, new BMap.Size(24, 24));var resolutions [262144, 13…

如何用 tensorflow serving 部署服务

第一步&#xff0c;读一读这篇博客 https://www.jb51.net/article/138932.htm &#xff08;浅谈Tensorflow模型的保存与恢复加载&#xff09; 第二步&#xff1a; 参考博客&#xff1a; https://blog.csdn.net/u011734144/article/details/82107610按照上述教程配置好相关文件之…

python CGI环境搭建

本文web服务器使用的为apache。 1. 安装apache yum install -y httpd 2. 配置apache 修改apache配置文件/etc/httpd/conf/httpd.conf将下面一行的注释去掉&#xff0c;如果没有则添加:LoadModule cgid_module modules/mod_cgid.so cgi脚本文件的默认路径为/var/www/cgi-bin/修改…

从实践出发,腾讯云深入解读云端数据库技术

下载网站:www.SyncNavigator.CN 客服QQ1793040---------------------------------------------------------- 关于HKROnline SyncNavigator 注册机价格的问题 HKROnline SyncNavigator 8.4.1 非破解版 注册机 授权激活教程 最近一直在研究数据库同步的问题&#xff0c;在网上…

前端——JavaScript之if语句

4.1 if语句 如果……否则…… &#xff0c; 让程序出现分支 1 <script type"text/javascript"> 2 var a 8; 3 if(a > 60){ 4 alert("及格了"); 5 }else{ 6 alert("不及…

SDUTOJ3302_效率至上(线段树)

效率至上 Time Limit: 5000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description 题意很简单,给出一个数目为n的非有序序列,然后有m次查询.对于每次查询输入两个正整数l,r请输出区间[l,r]的最大值与最小值的差值 Input 第一行&#xff1a;输入两个正整数n,m (…

matlab状态转空间,matlab - 如何在Matlab中使用状态空间模型避免tf()命令 - 堆栈内存溢出...

我试图避免使用Matlab中的函数tf()&#xff0c;因为它需要运行特定的工具箱。我正在使用的传递函数非常简单。 是散热器温度的模型。H(s) (Rth/Tau)/(s 1/Tau)为了避免使用tf()函数&#xff0c;我尝试将传递函数替换为Matlab中编码的状态空间模型。我已经使用函数ss()来获取A…

matlab中的振铃现象是啥,振铃现象产生的原因

振铃现象是怎么回事?是什么?如何减小和抑制上冲及振铃?下面就由小编告诉大家和抑制方法吧!由于任何传输线都不可避免地存在着引线电阻、引线电感和杂散电容&#xff0c;因此&#xff0c;一个标准的脉冲信号在经过较长的传输线后&#xff0c;极易产生上冲和振铃现象。大量的实…