好久没写爬出了,这段时间都这折腾别的,今天看了个视频爬图片,自己无聊也写了个千图网的爬虫,结果写了好久,真是生疏,等把web知识补完一定要多写啊。

好了,我们先看看网站,看看如何遍历全站,截图是我选择的入口

Paste_Image.png

既然找到了遍历的入口,接下来就简单了。这里讲下主要思路,跟之前爬宜搜全站一样,先爬主页的所有子栏目的网址,然后根据每个子栏目的页数构造出每一个页面的网址,之后就是遍历全站了,这里贴一下scrapy里面主要spider是代码

# -*- coding: utf-8 -*-

import scrapy

from scrapy.http import Request

from qiantu_spider.items import QiantuSpiderItem

class QiantuSpider(scrapy.Spider):

name = "qiantu"

allowed_domains = ["58pic.com"]

start_urls = ['http://58pic.com/']

def parse(self, response):

all_url = response.xpath('//div[@class="moren-content"]/a/@href').extract()

#print(all_url)

for i in range(0,int(len(all_url))):

single_url = all_url[i]

each_html = single_url + '0/day-1.html' # 将每个页面构造成第一页的网址,方便提取每页的最大页数

yield Request(each_html,callback=self.list_page,meta={'front':single_url})#把每个子网站传到下面的函数

def list_page(self,response):

front_url = response.meta['front']

try:

max_page = response.xpath('//*[@id="showpage"]/a[8]/text()').extract()[0]#提取最大页数

print(max_page)

#print(front_url)

try:

for i in range(1,int(max_page)+1):

img_page = front_url+'0/day-'+str(i)+'.html'#构造出每一个分类的所有url,接下来就是提取图片地址了

#print(img_page)

yield Request(url=img_page,callback=self.get_img_link)

except:

print('该网页没有数据')

except Exception as e:

print('网页没有最大页数,作废网页')

def get_img_link(self,response):

item =QiantuSpiderItem()

img_link1 = response.xpath("//a[@class='thumb-box']/img/@src").extract()

if img_link1:

#该网站图片有点奇葩,有些页面的图片存储方式不一样,总体来说是这两者,分开写就好了

item['img_urls'] =img_link1

#print(1,img_link1)

yield item

else:

img_link2=response.xpath('//*[@id="main"]/div/div/div/div/div/a/img/@src').extract()

item['img_urls'] = img_link2

yield item

#print(2,img_link2)

下面是piplines代码,主要是把图面下载到指定的文件夹,用了urlretrieve方法

# -*- coding: utf-8 -*-

# Define your item pipelines here

#

# Don't forget to add your pipeline to the ITEM_PIPELINES setting

# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html

import urllib.request

import re

import os

class QiantuSpiderPipeline(object):

def process_item(self, item, spider):

for url in item['img_urls']:

try:

real_url = re.sub(r'!(.*)','',url)#把每个图片地址!号后面的字符去掉,剩下的是高清图地址

name = real_url[-24:].replace('/','')#去除不能表示文件名的符号,这里将我搞死了

#print(name)

file ='E://qiantu/'

urllib.request.urlretrieve(real_url,filename=file+name)

except Exception as e:

print(e,'该图片没有高清地址')

print('成功下载一页图片')

千图网全站的爬取很简单,不过记得要在settings里面把robot.txt协议改掉,最好也伪造一下useragent

如图是短短几分钟的爬取效果

Paste_Image.png

python爬取千图网_scrapy之千图网全站爬虫相关推荐

  1. Python | 使用Python爬取Wallhaven网站壁纸并上传百度网盘

    更多详情请查看Honker Python | 使用Python爬取Wallhaven网站壁纸并上传百度网盘 给大家推荐一款超好用的壁纸下载网站-- wallhaven 第一次知道这个网站的时候,惊为天 ...

  2. python爬取微博热搜显示到折线图_Python爬取新浪微博热搜榜-Go语言中文社区

    我们如何爬取这50条热搜呢?今天写一个简单的方法供感兴趣的朋友们参考! 引用库: requests json lxml.etree bs4.BeautifulSoup引用方法如下: 如果没有下载的需要 ...

  3. python 爬取_我用Python爬取了妹子网100G的套图

    前言 最近在做监控相关的配套设施,发现很多脚本都是基于Python的.很早之前就听说其大名,人生苦短,我学Python,这并非一句戏言.随着人工智能.机器学习.深度学习的崛起,目前市面上大部分的人工智 ...

  4. python爬取裁判文书并分析_裁判文书网爬虫攻克

    最近因为公司需要爬取裁判文书网的某一类别文章数据,于是简单研究了一下,发现网站数据全是js加载的,于是想都没想直接用selenium尝试爬取,没想到竟然有selenium都抓取不到的js(刚毕业的py ...

  5. python爬取微博热搜显示到折线图_微博热搜榜前20信息数据爬取进行数据分析与可视化...

    一.设计方案 1.主题式网络爬虫名称:微博热搜榜前20信息数据爬取进行数据分析与可视化 2.爬取内容与数据特征分析:爬取微博热搜榜前20热搜事件.排名与热度,数据呈一定规律排序. 3.设计方案概述:思 ...

  6. 使用python爬取全国所有热门景点数据---去哪儿网

    要爬取去哪儿上面的所有的热门景点的数据 可以先再 搜索出 搜索 热门景点 http://piao.qunar.com/ticket/list.htm?keyword=%E7%83%AD%E9%97%A ...

  7. 我用Python爬取了妹子网200G的套图

    前言 最近在做监控相关的配套设施,发现很多脚本都是基于Python的.很早之前就听说其大名,人生苦短,我学Python,这并非一句戏言.随着人工智能.机器学习.深度学习的崛起,目前市面上大部分的人工智 ...

  8. 我用Python爬取了妹子网100G的套图

    前言 最近在做监控相关的配套设施,发现很多脚本都是基于Python的.很早之前就听说其大名,人生苦短,我学Python,这并非一句戏言.随着人工智能.机器学习.深度学习的崛起,目前市面上大部分的人工智 ...

  9. Python爬取酷狗音乐-详解(多图预警)

    目录 1.前言 2.分析一下 1. 2. 3. 3.代码解释 4.完整代码 5.结语 1.前言 前面发布了一篇关于QQ音乐爬取的教程,但对于我们这种文艺青年来说,一个平台的歌曲怎么够我们听的,也是因为 ...

  10. python爬取各国美景图片制作照片墙和动图

    前言 由于工作需要制作照片墙,就顺便爬了一波美景图,用来练手. 爬取 先给出我爬取的网站地址 http://www.win4000.com/zt/guowaifengguang_1.html 网站分析 ...

最新文章

  1. 1122 Hamiltonian Cycle (25 分)【难度: 一般 / 知识点: 模拟 哈密顿回路】
  2. java中map可以为空吗_检查NavigableMap是否在Java中为空
  3. Redis的备份与恢复
  4. A5D2 GPIO测试
  5. linux 内核空间 sy,在 Linux 下用户空间与内核空间数据交换的方式,第 1 部分: 内核启动参数、模块参数与sysf...
  6. 5G、IoT 时代下,手机聚焦拍照是否走错了方向?
  7. c语言局域网聊天项目,局域网聊天的程序(C++版)
  8. 3dmax如何拆分模型_3dmax怎么拆分模型画贴图
  9. maikr博客伴侣全新发布,支持博客备份和博客搬家
  10. android 激光打印机,#本站首晒# 安卓端无线打印的方案选择 兄弟 DCP1618W 一体机...
  11. 基于Mybatis的语音播报随机点到系统
  12. 解决云服务器添加了安全组端口无法访问问题
  13. Windows键盘鼠标模拟按键类型
  14. UPC 黑熊过河(基本状态转移)
  15. 一文带你搞懂Vue中的Excel导入导出
  16. mysql 删除重复_MySQL查询和删除重复记录
  17. Linux基本操作1
  18. C#中 out的使用
  19. ERP系统标准功能模块
  20. iOS开发-聊天气泡的绘制和聊天消息列表

热门文章

  1. ps怎么缩放图层大小_PS怎么快速修改图层大小|Adobe Photoshop CS6图层大小尺寸调整--系统之家...
  2. pip升级及关于pyecharts安装下载所遇到的问题及部分的解决
  3. ADNI数据集相关概念初步整理
  4. 机器学习基础概念(三):归纳与演绎
  5. ip归属地是什么?ipv4和ipv6区别?
  6. Separating Axis Theorem(SAT)
  7. Win10访问Linux分区
  8. php 微信上传多张图片,php,微信_微信jssdk能上传多张图片吗?,php,微信,javascript - phpStudy...
  9. Win11将输入法的繁体改为简体
  10. 方波正弦波三角波信号发生电路