scrapy爬取图片案例
练习了爬取文字信息的案例,接着练练爬取图片。scrapy的功能真心强大。
目的:爬取斗鱼美女主播的图片
网址:斗鱼主播信息
这是网址的数据内容:可以看到是json格式的数据
创建工程和spider
scrapy startproject Douyu
scrapy genspider dyspider
编写item
import scrapy
class DouyuItem(scrapy.Item):
# 主播名
nickname = scrapy.Field()
# 图像链接
imglink = scrapy.Field()
pass
编写spiders
import scrapy
import json
from Douyu.items import DouyuItem
class DyspiderSpider(scrapy.Spider):
name = 'dyspider'
allowed_domains = ['douyucdn.cn']
baseURL = "http://capi.douyucdn.cn/api/v1/getVerticalRoom?limit=20&offset="
offset = 0
start_urls = [baseURL + str(offset)]
def parse(self, response):
#json.loads把Json格式字符串解码转换成Python对象
#从response.body中获取data字段中的数据
data_list = json.loads(response.body.decode("utf-8"))['data']
#如果data_list没有拿到数据,即数据爬取完毕
if len(data_list) == 0:
return
#从data_list中拿nickname和vertical_src字段的数据
for data in data_list:
item = DouyuItem()
item["nickname"] = data["nickname"]
item["imglink"] = data["vertical_src"]
yield item
#开始拿之后的数据
self.offset += 20
yield scrapy.Request(self.baseURL + str(self.offset),callback = self.parse)
pass
编写pipelines
import os
import scrapy
from scrapy.pipelines.images import ImagesPipeline
from Douyu.settings import IMAGES_STORE as img_store
#继承ImagesPipeline类,对图片进行处理
class DouyuPipeline(ImagesPipeline):
def get_media_requests(self,item,info):
imglink = item["imglink"]
yield scrapy.Request(imglink)
def item_completed(self, results, item, info):
#对获取的图片重命名
imagepath = [x["path"] for ok,x in results if ok]
os.rename(img_store + imagepath[0],img_store + item["nickname"] + ".jpg")
return item
编写setting
BOT_NAME = 'Douyu'
SPIDER_MODULES = ['Douyu.spiders']
NEWSPIDER_MODULE = 'Douyu.spiders'
#图片存储位置字段,image.py文件的from_settings方法会获取该字
#段,该字段表明下载的图片存储的位置
IMAGES_STORE = "E:/ScrapyFile/Douyu/data/"
#UA标识,模拟手机端发送的请求
USER_AGENT = 'Mozilla/5.0 (Linux; U; Android 6.0.1; zh-cn; Redmi 3X Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko)Version/4.0 Chrome/37.0.0.0 MQQBrowser/7.2 Mobile Safari/537.36'
#关闭robots协议
ROBOTSTXT_OBEY = False
ITEM_PIPELINES = {
'Douyu.pipelines.DouyuPipeline': 300,
}
执行spider
scrapy crawl myspider
。。。。。。。。。。
然后好多美女图片就被爬取出来了。~O(∩_∩)O哈哈~
总结
这两天对scrapy框架的学习,我收获很多。scrapy对数据的抓取功能实在是太强大了,而且只要配置好环境它的使用其实是非常简单的。
第一步:创建工程 scrapy startproject XXX
第二步:创建spider scrapy genspider XXX “http://XXX.XX”
第三步:编写爬虫文件
第四步:编写管道文件
第五步:编写setting文件
第六步:执行spider scrapy crawl XXX
只需要这6步,就能完成对数据的爬取了。当然寻找合适的xpath和正则表达式也很重要,这就看个人对网页结构掌握的熟练度了。
最后附上一张结果图,= ̄ω ̄=
每天多进步一点,就离梦想更近一点~加油!!