python爬取千图网_scrapy之千图网全站爬虫
好久没写爬出了,这段时间都这折腾别的,今天看了个视频爬图片,自己无聊也写了个千图网的爬虫,结果写了好久,真是生疏,等把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之千图网全站爬虫相关推荐
- Python | 使用Python爬取Wallhaven网站壁纸并上传百度网盘
更多详情请查看Honker Python | 使用Python爬取Wallhaven网站壁纸并上传百度网盘 给大家推荐一款超好用的壁纸下载网站-- wallhaven 第一次知道这个网站的时候,惊为天 ...
- python爬取微博热搜显示到折线图_Python爬取新浪微博热搜榜-Go语言中文社区
我们如何爬取这50条热搜呢?今天写一个简单的方法供感兴趣的朋友们参考! 引用库: requests json lxml.etree bs4.BeautifulSoup引用方法如下: 如果没有下载的需要 ...
- python 爬取_我用Python爬取了妹子网100G的套图
前言 最近在做监控相关的配套设施,发现很多脚本都是基于Python的.很早之前就听说其大名,人生苦短,我学Python,这并非一句戏言.随着人工智能.机器学习.深度学习的崛起,目前市面上大部分的人工智 ...
- python爬取裁判文书并分析_裁判文书网爬虫攻克
最近因为公司需要爬取裁判文书网的某一类别文章数据,于是简单研究了一下,发现网站数据全是js加载的,于是想都没想直接用selenium尝试爬取,没想到竟然有selenium都抓取不到的js(刚毕业的py ...
- python爬取微博热搜显示到折线图_微博热搜榜前20信息数据爬取进行数据分析与可视化...
一.设计方案 1.主题式网络爬虫名称:微博热搜榜前20信息数据爬取进行数据分析与可视化 2.爬取内容与数据特征分析:爬取微博热搜榜前20热搜事件.排名与热度,数据呈一定规律排序. 3.设计方案概述:思 ...
- 使用python爬取全国所有热门景点数据---去哪儿网
要爬取去哪儿上面的所有的热门景点的数据 可以先再 搜索出 搜索 热门景点 http://piao.qunar.com/ticket/list.htm?keyword=%E7%83%AD%E9%97%A ...
- 我用Python爬取了妹子网200G的套图
前言 最近在做监控相关的配套设施,发现很多脚本都是基于Python的.很早之前就听说其大名,人生苦短,我学Python,这并非一句戏言.随着人工智能.机器学习.深度学习的崛起,目前市面上大部分的人工智 ...
- 我用Python爬取了妹子网100G的套图
前言 最近在做监控相关的配套设施,发现很多脚本都是基于Python的.很早之前就听说其大名,人生苦短,我学Python,这并非一句戏言.随着人工智能.机器学习.深度学习的崛起,目前市面上大部分的人工智 ...
- Python爬取酷狗音乐-详解(多图预警)
目录 1.前言 2.分析一下 1. 2. 3. 3.代码解释 4.完整代码 5.结语 1.前言 前面发布了一篇关于QQ音乐爬取的教程,但对于我们这种文艺青年来说,一个平台的歌曲怎么够我们听的,也是因为 ...
- python爬取各国美景图片制作照片墙和动图
前言 由于工作需要制作照片墙,就顺便爬了一波美景图,用来练手. 爬取 先给出我爬取的网站地址 http://www.win4000.com/zt/guowaifengguang_1.html 网站分析 ...
最新文章
- 1122 Hamiltonian Cycle (25 分)【难度: 一般 / 知识点: 模拟 哈密顿回路】
- java中map可以为空吗_检查NavigableMap是否在Java中为空
- Redis的备份与恢复
- A5D2 GPIO测试
- linux 内核空间 sy,在 Linux 下用户空间与内核空间数据交换的方式,第 1 部分: 内核启动参数、模块参数与sysf...
- 5G、IoT 时代下,手机聚焦拍照是否走错了方向?
- c语言局域网聊天项目,局域网聊天的程序(C++版)
- 3dmax如何拆分模型_3dmax怎么拆分模型画贴图
- maikr博客伴侣全新发布,支持博客备份和博客搬家
- android 激光打印机,#本站首晒# 安卓端无线打印的方案选择 兄弟 DCP1618W 一体机...
- 基于Mybatis的语音播报随机点到系统
- 解决云服务器添加了安全组端口无法访问问题
- Windows键盘鼠标模拟按键类型
- UPC 黑熊过河(基本状态转移)
- 一文带你搞懂Vue中的Excel导入导出
- mysql 删除重复_MySQL查询和删除重复记录
- Linux基本操作1
- C#中 out的使用
- ERP系统标准功能模块
- iOS开发-聊天气泡的绘制和聊天消息列表
热门文章
- ps怎么缩放图层大小_PS怎么快速修改图层大小|Adobe Photoshop CS6图层大小尺寸调整--系统之家...
- pip升级及关于pyecharts安装下载所遇到的问题及部分的解决
- ADNI数据集相关概念初步整理
- 机器学习基础概念(三):归纳与演绎
- ip归属地是什么?ipv4和ipv6区别?
- Separating Axis Theorem(SAT)
- Win10访问Linux分区
- php 微信上传多张图片,php,微信_微信jssdk能上传多张图片吗?,php,微信,javascript - phpStudy...
- Win11将输入法的繁体改为简体
- 方波正弦波三角波信号发生电路