python爬虫 爬取360图片(非结构化数据)
爬虫思路:先拼接json数据包的url,再从中提取图片链接
域名:image.so.com
抓包
- 360图片是动态加载的数据
- 点击图片分类中的清新美女 --> ctrl + shift + i --> Network --> xhr -->向下滑动鼠标加载图片抓包
- 找到图片所在包,查看queryStringParameters
- ch:beauty
- t1:595
- src:banner_beauty
- sn:90 #这个值一直在变,变化规律:0 30 60 90 …
- listtype:new
- temp:1
除参数sn外,其余参数在清新美女图片分类下不变
所以用RE改写获取josn数据的Request URL(requestURL在headers中获取):
https://image.so.com/zjl?ch=beauty&t1=595&src=banner_beauty&gid=fc8d902e79ef72ded26b6b625909538b&sn={}&listtype=new&temp=1
- 从后端传给前端的json数据中获取图片的连接
- 将requestURL在新的网页中打开,查看到图片链接所在key:qhimg_url:“xxx”
创建项目
scrapy startproject So
cd So
scrapy genspider so image.so.comitems.py中
import scrapy#定义数据结构:图片链接+图片名称
class SoItem(scrapy.Item)img_link = scrapy.Field()#图片名称,用于给下载下来的图片命名img_title = scrapy.Field()
- 爬虫文件中
import scrapy
import json
from ..items import SoItemclass SoSpider(scrapy.Spider):name = 'so'allowed_domains = ['image.so.com']#图片的json数据包的url url = 'https://image.so.com/zjl?ch=beauty&t1=595&src=banner_beauty&gid=fc8d902e79ef72ded26b6b625909538b&sn={}&listtype=new&temp=1'#重写scrapy.Spider的start_requests方法,因为一次性给调度器多个链接def start_requests(self):#拼个5个图片的数据包的urlfor sn in range(0,121,30):url = self.url.format(sn):#将网页交给调度器yield = scrapy.Request(url=url,callback=self.parse)#解析函数,提取图片链接def parse(self,response):#拿响应内容html = json.loads(response.text)#从items.py中导入item,将每个图片的链接和名字赋值给item,并传给管道item = SoItem()for img in html['list']: #html['list']为所有列表的信息#向item中赋值并传给管道文件item['img_link'] = img['qhimg_url'] #单个图片的链接item['img_title'] = img['title']#将item传给管道文件yield item
pipelines.py中
import scrapy
#导入scrapy提供的图片管道类,实现下载图片功能
#功能封装了爬虫文件中:为了保存下来图片,将图片链接发给调度器入队列,再指定解析函数,然后再得到response.body,然后再with open文件保存下来的步骤
from scrapy.pipelines.images import ImagesPipelineclass SoPipeline(ImagesPipeline):#重写ImagePipeline类的get_media_requests方法#该方法用于将图片链接scrapy.Request传给调度器def get_media_requests(self,item,info):yield scrapy.Request(url=item['img_link'],meta={'name':item['img_title']} #将图片名通过item传给管道)#接下来下载图片保存图片的功能已被封装#源码默认将下载的文件名用hashlib.sha1加密,并放在一个full文件夹下#我们想用文件名title给下载下来的图片命名,并且去掉full文件夹,所以需要重写方法:file_path()def file_path(self,request,respnse=None,info=None):#scrapy.Request()中所有参数都为请求对象requests的属性(可以将这两个看成一样)name = request.meta['name'] #拼接图片名filename = name + '.' + request.url.split('.')[-1] #request.url.split('.')[-1]为图片的格式(jpg,png等)return filename#打印出数据的管道类
class SoPipeline(object):def process_item(self,item,spider):print(item['img_link'])return item
settings.py中
ROBOTSTXT_OBEY = False
DOWNLOAD_DELAY = 0.1
DEFAULT_REQUEST_HEADERS = { 'Accept':'...','Accept-Language':'..','User-Agent':'...'}
ITEM_PIPELINES = {'So.pipelines.SoPipeline': 300,}#指定图片(非结构化数据)保存的路径
IMAGES_STORE = '/home/ubuntu/360_images/'
主项目目录下创建run.py
from scrapy import cmdlinecmdline.execute('scrapy crawl so'.split())
知识点扩展
如果以后要抓文件,scrapy的管道文件中也帮你封装了下载保存的方法,步骤如下:
pipelines.py中
from scrapy.pipelines.files import FilePipelineclass SoPipeline(FilePipeline):#要重写的方法也和图片一样...
settings.py中
#指定文件保存的路径
FILES_STORE = '/home/...'
python爬虫 爬取360图片(非结构化数据)相关推荐
- python爬虫,爬取下载图片
python爬虫,爬取下载图片 分别引入以下三个包 from urllib.request import urlopen from bs4 import BeautifulSoup import re ...
- Python爬虫爬取相关图片
简要的实现实现Python爬虫爬取百度贴吧页面上的图片,下面的网页就是本篇博客所要爬的网页,当然看到的只是其中的一部分图片,是所要爬取的页面, 而下图则是最终的爬取的图片: 接下来就简要的讲讲爬取的整 ...
- python爬虫爬取网页图片_Python爬虫:爬取网页图片
先分析查找要爬取图片的路径 在浏览器F12 审查元素 整体实现代码 # -- coding:UTF-8 -- import requests from bs4 import BeautifulSoup ...
- python爬虫爬取百度图片总结_python爬虫如何批量爬取百度图片
当我们想要获取百度图片的时候,面对一张张图片,一次次的点击右键下载十分麻烦.python爬虫可以实现批量下载,根据我们下载网站位置.图片位置.图片下载数量.图片下载位置等需求进行批量下载,本文演示py ...
- python爬虫爬取百度图片,python爬虫篇2:爬取百度图片
入门级 import requests import re import os from urllib import error def main(): dirPath = "E:\pyth ...
- 上手快!!福利局!新手如何使用python爬虫爬取网页图片(使用正则进行数据解析)当然这个新手是我自己
作为一个python新入门小白,突然就想发个博客,一方面为了记录学习历程,一方面能分享给新入门的同学经验,更多的是想和大家一起学习和交流.以下是我以小白的角度分享的爬虫的相关知识和一个简单的爬取网页图 ...
- 利用python爬虫爬取斗鱼图片(简单详细)
关于 在一个安静的夜晚,我缓慢的打开了电脑,望着已经睡着的父母,我轻轻的把门关上,看着斗鱼颜值主播的魅力,我不尽感叹,要是每天都可以不需要那么麻烦的去看那该有多好! 于是我想起了最近刚学的爬虫,嘴角露 ...
- Python爬虫爬取src图片
Python爬虫爬取图片 需要用到的库: os time request lxml 代码源码如下: import os import time import requests from lxml im ...
- 超详细解析python爬虫爬取京东图片
超详细图片爬虫实战 实例讲解(京东商城手机图片爬取) 1.创建一个文件夹来存放你爬取的图片 2.第一部分代码分析 3.第二部分代码分析 完整的代码如下所示: 升级版代码: 爬取过程中首先你需要观察在手 ...
最新文章
- foolscap实现rpc(四)
- 恒生证券期货行业用户维稳工作指引(一)
- C和指针之数组编程练习5 (矩阵相乘)
- JavaFX其他事件
- 阿里架构总监一次讲透中台架构,13页PPT精华详解,建议收藏
- 织梦html2text( me),织梦dedecms中function='Html2Text(@me)的使用方法
- 高薪、稀缺人才必备哪些技能?BDTC大会告诉你,附最新议程!
- [机器学习]关联挖掘算法Apriori和FP-Growth以及基于Spark 实例
- cisco ASA 防火墙安全算法原理和基本配置(转自http://xiaoxiao1001.blog.51cto.com/7640562/1300161)
- Matlab | 省略号作用
- 手机如何压缩jpg图片的大小?手把手教你快速压缩jpg格式图片
- 数字摄影测量之特征点提取算法
- jQuery动画基础讲解(教你玩转jQuery动画)
- nyist 252 01串
- Python正则表达式模式
- Android下拉刷新
- cad老是弹出命令中发生异常_CAD出现致命错误的解决方法
- 数字IC后端实现问答(摘选自知识星球本周问答)
- 天问:科学有边界吗?----《三体》与量子物理史话
- 立哥版-无线电通讯简史
热门文章
- hdu 6053 TrickGCD
- 一种利用微小信号放大器进行放大的红外成像仪
- 初次使用 python poetry 包管理模块踩坑
- 刘兵《Entity and aspect extraction for opinion mining 》翻译笔记
- 在Ubuntu中获取奥比中光的深度值 Python代码
- 智能哨兵叫哨执勤管理系统软件
- 基于SpringBoot2的房屋租赁系统的设计与实现-计算机、软件工程、网络工程等专业毕设
- 什么是SAN网络?SAN网络上的存储备份和恢复怎么操作?SAN 测试网络存储与服务器架构架构优化
- 【k8s】kubectl label命令(对node添加、删除label)
- mysql查找操作返回值出现 - [User{id=1, userName='null', date=Sun Sep 16 00:00:00 CST 2018}]