scrapy框架来爬取壁纸网站并将图片下载到本地文件中
首先需要确定要爬取的内容,所以第一步就应该是要确定要爬的字段:
首先去items中确定要爬的内容
class MeizhuoItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
# 图集的标题
title = scrapy.Field()
# 图片的url,需要来进行图片的抓取
url = scrapy.Field()
pass
在确定完要爬的字段之后,就是分析网站页面的请求了,找到自己需要的内容,我这里爬的是http://www.win4000.com里面的壁纸照片
首先我们在分析的时候,点到一个图集里面可以发现,真正的照片都在这里面,所以我们分成两步走
1、找到所有图集的url
2、根据指定的图集的url来将里面所有照片的URL找出来
但是找出照片的url之后又面临一个问题,那就是那个url并不是我们真正想要的,它在最后还加了一层修饰,所以我们还要对这个url进一步的操作
# -*- coding: utf-8 -*-
import scrapy
from scrapy.selector import Selector
from fake_useragent import UserAgent
from meizhuo.items import MeizhuoItem headers = {
'user-agent': UserAgent(verify_ssl=False).chrome
} class MzSpider(scrapy.Spider):
name = 'mz'
allowed_domains = ['www.win4000.com']
start_urls = [
'http://www.win4000.com/wallpaper_2285_0_0_1.html',
'http://www.win4000.com/wallpaper_204_0_0_1.html'
] def parse(self, response):
sel = Selector(response)
list = sel.xpath('//*[@class="list_cont Left_list_cont"]/div/div/div/ul/li/a') for img in list:
# 这个是每个图集得到的url
url = img.xpath('@href').extract_first()
title = img.xpath('@title').extract_first()
# 对我的每一个URL进行解析
yield scrapy.Request(url, callback=self.get_all_img, meta={'title': title})
# 对于下一页进行定位,如果存在就进行跳转
next_url = sel.xpath('//*[@class="next"]/@href').extract_first()
if next_url is not None:
yield scrapy.Request(next_url, callback=self.parse) def get_all_img(self, response):
item = MeizhuoItem() container = []
sel = Selector(response)
# 这个是所有照片的所有的总共的页数
img_list = sel.xpath('//*[@class="scroll-img-cont"]/ul')
for img in img_list:
img_url = img.xpath('li/a/img/@data-original').extract()
for url in img_url:
# 这个url还是需要经过处理的,所以要循环出来挨个进行修改
cmp_url = url.split('_')[0] + '.jpg'
container.append(cmp_url)
item['url'] = container
item['title'] = response.meta['title']
# print(container) yield item
container.clear()
当我们将图集中的所有照片的url找出来之后要做的,就是将图片下载到本地中,所以我们就在pipelines中配置了相关的下载路径的配置,然后利用抓取到的图片的url和rqeuests的模块的配合使用,来获取到图片真正的二进制的数据,然后将这些二进制数据,写入到你配置的指定的文件夹中,
# -*- coding: utf-8 -*- # Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html
import os
import requests
from meizhuo.settings import IMAGES_STORE
from fake_useragent import UserAgent headers = {
'user-agent': UserAgent(verify_ssl=False).chrome
} class MeizhuoPipeline(object):
def process_item(self, item, spider):
dir_path = IMAGES_STORE
title = item['title']
img_list = item['url']
print(title, img_list)
"""
1、我要创建指定的路径
2、然后我要利用requests模块获取到那一个url的二进制数据保存进去
"""
if not os.path.exists(IMAGES_STORE):
os.mkdir(IMAGES_STORE) # 如果这个顶头文件夹存在的话
collection_url = os.path.join(IMAGES_STORE, title)
print('', collection_url)
if not os.path.exists(collection_url):
os.mkdir(collection_url)
for url_list in range(len(img_list)):
cmp_url = os.path.join(collection_url, img_list[url_list]) # print(cmp_url)
file_path = os.path.join(collection_url, title) + str(url_list) + '.jpg'
print(file_path)
with open(file_path, 'wb') as fp:
res = requests.get(img_list[url_list], headers=headers).content
# print(img_list[url_list])
fp.write(res)
print('insert successfully!!!')
最后就是要讲一下,在settings中的相关配置:
BOT_NAME = 'meizhuo' SPIDER_MODULES = ['meizhuo.spiders']
NEWSPIDER_MODULE = 'meizhuo.spiders'
ROBOTSTXT_OBEY = True
ITEM_PIPELINES = {
'meizhuo.pipelines.MeizhuoPipeline': 300,
}
# 下载的顶头路径
IMAGES_STORE = '/Users/mac/Documents/girl'
# 下载延迟
DOWNLOAD_DELAY = 0.3
scrapy框架来爬取壁纸网站并将图片下载到本地文件中的更多相关文章
- python爬取视频网站m3u8视频,下载.ts后缀文件,合并成整视频
最近发现一些网站,可以解析各大视频网站的vip.仔细想了想,这也算是爬虫呀,爬的是视频数据. 首先选取一个视频网站,我选的是 影视大全 ,然后选择上映不久的电影 “一出好戏” . 分析页面 我用的是c ...
- Scrapy框架——CrawlSpider爬取某招聘信息网站
CrawlSpider Scrapy框架中分两类爬虫,Spider类和CrawlSpider类. 它是Spider的派生类,Spider类的设计原则是只爬取start_url列表中的网页, 而Craw ...
- 爬虫Scrapy框架-2爬取网站视频详情
爬取视频详情:http://www.id97.com/ 创建环境: movie.py 爬虫文件的设置: # -*- coding: utf-8 -*- import scrapy from movi ...
- scrapy入门实战-爬取代理网站
入门scrapy. 学习了有这几点 1.如何使用scrapy框架对网站进行爬虫: 2.如何对网页源代码使用xpath进行解析: 3.如何书写spider爬虫文件,对源代码进行解析: 4.学会使用scr ...
- scrapy框架 + selenium 爬取豆瓣电影top250......
废话不说,直接上代码..... 目录结构 items.py import scrapy class DoubanCrawlerItem(scrapy.Item): # 电影名称 movieName = ...
- Scrapy实战:使用scrapy再再次爬取干货集中营的妹子图片
需要学习的知识: 1.获取到的json数据如何处理 2.保存到json文件 3.保存到MongoDB数据库 4.下载项目图片(含缩略图) 1.创建项目 scrapy startproject gank ...
- 爬取某网站景区列表并保存为csv文件
网址:http://www.halehuo.com/jingqu.html 经过查看可以发现,该景区页面没有分页,不停的往下拉,页面会进行刷新显示后面的景区信息 通过使用浏览器调试器,发现该网站使用的 ...
- [原创]python爬虫之BeautifulSoup,爬取网页上所有图片标题并存储到本地文件
from bs4 import BeautifulSoup import requests import re import os r = requests.get("https://re. ...
- 爬虫系列5:scrapy动态页面爬取的另一种思路
前面有篇文章给出了爬取动态页面的一种思路,即应用Selenium+Firefox(参考<scrapy动态页面爬取>).但是selenium需要运行本地浏览器,比较耗时,不太适合大规模网页抓 ...
随机推荐
- 打印机服务配置篇WindowsServer2008
本次配置Server2008 打印服务器 目的实现Kingdee远程打印服务,直接在金蝶客户端部署打印机服务器 服务器角色: --打印服务器 --LPD服务 --Internet打印 *打印服务 ...
- Python学习 之三 Python基础&运算符
第三章:Python基础 & 运算符 3.1 内容回顾 & 补充 计算机基础 编码 字符串: "中国" "Hello" 字 符: 中 e 字 节 ...
- 什么是W3C??
为什么想着写这个博客呢,因为最近准备简历去面试,看到好多公司上面都写着熟悉 w3c ,很纳闷,我是一个新手,w3c是什么呢?没听过!!! 所以就去网上查了: 什么是W3C? W3C 万维网联盟(wor ...
- Redis学习总结(五)--Redis集群创建
在之前我们讲到了主从,但是对于大数据量的场景下我们就需要用到集群了,让我们来了解下集群吧. 为什么需要集群 单机内存太小 redis最高可以达到10万/s 请求,如果超过该频率呢? 数据分布方式 数据 ...
- Egret白鹭开发微信小游戏手机震动功能
最近一直在修改调整项目,没有接触新功能,今天终于有机会,去翻了微信API,发现手机震动的API,今天分享出来大家一起学习学习 对于震动,微信提供了两个API,分别是: wx.vibrateShort: ...
- MySQL数据库笔记六:数据定义语言及数据库的备份和修复
1. MySQL中的函数 <1>加密函数 password(str) 该函数可以对字符串str进行加密,一般情况下,此函数给用户密码加密. select PASSWORD('tlxy666 ...
- Delphi - Indy 创建邮件自动发送服务
服务器自动邮件线程 功能:此程序主要实现对Oracle数据库表tableName(存放需要发送邮件的相关信息)里面相关信息的邮件发送. 优点:开发人员可以直接再数据库后台对tableName表进行插入 ...
- HDU 5984 题解 数学推导 期望
Let’s talking about something of eating a pocky. Here is a Decorer Pocky, with colorful decorative s ...
- E-triples II_2019牛客暑期多校训练营(第四场)
求用n个3的倍数的数按位或出数字a的方案数有多少种(0也算3的倍数) 题解 若数b的每个二进制位上的1,在a中也为1,则称b为a的子集 容易知道任意个a的子集按位或出来的结果还是a的子集 若问题改为按 ...
- webpack4 公共模块打包,怎么抽取出来一个需要经常修改的包
项目中有一个需求: 所有页面引用了一个公共ad.js 因为广告需要不断投放新渠道,所以ad.js需要经常上线更新,这样会导致打包出来的 commons.js经常更新,缓存一下无效了.所以急需将ad.j ...