边学边记,记录遇到的坑达成的小目标 。
前篇爬取的是静态的图片这次是针对gif。其实无论静态动态用如下的方式都可以爬取。代码如下:(多玩写错了变成douwan)
items:
import scrapy
class DouwanItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
gif_url=scrapy.Field() #gif地址
gif_title=scrapy.Field() #gif图片name
from scrapy.exceptions import DropItem
from urllib import request
#import os
class DouwanPipeline(object):
def process_item(self, item, spider):
if item['gif_url']:
for (url,title) in zip(item['gif_url'],item['gif_title']):
request.urlretrieve(url,'h:\\new\\gaoxiao_gif\\%s.gif'%title) #提前建好的路径
else:
raise DropItem(item)
return item
def close_spider(self,spider):
print("!!!!!!!已爬取完毕,nice work!!!!!!!!")
ROBOTSTXT_OBEY = True
DOWNLOAD_DELAY = 3
DEFAULT_REQUEST_HEADERS = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'en',
'Referer':'http://tu.duowan.com/m/bxgif',
'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
}
ITEM_PIPELINES = {
'douwan.pipelines.DouwanPipeline': 300,
}
AUTOTHROTTLE_ENABLED = True
spider:
# -*- coding: utf-8 -*-
import scrapy
from douwan.items import DouwanItem
class DouwangifSpider(scrapy.Spider):
name = 'douwangif'
allowed_domains = ['duowan.com']
start_urls = ['http://tu.duowan.com/m/bxgif']
def parse(self, response):
#item=DouwanItem()
for url in response.xpath(".//li[@class='box']/a/@href").extract():
yield scrapy.Request(url,callback=self.parse_yituliu)
def parse_yituliu(self, response):
#item=DouwanItem()
for url_sec in response.xpath(".//div[@class='fr']/a[@class='picture-list']/@href").extract():
yield scrapy.Request(url_sec,callback=self.parse_final)
def parse_final(self, response):
item=DouwanItem()
item['gif_url']=response.xpath(".//div[@class='pic-box']/a/span/@data-img").extract()
item['gif_title']=response.xpath(".//div[@class='pic-box']/p[@class='comment']/text()").extract()
next_page=response.xpath(".//div[@class='rounded center']/div/a[2]/@href").extract()[0]
yield scrapy.Request('http://tu.duowan.com'+next_page,callback=self.parse_final)
yield item
2月7日补充:
上面只是爬取了部分图片,往下拉之后会出来很多新的图片,网站动态加载的内容我是这样查找的
用的chrome浏览器,之前一直用360的现在发现玩爬虫还是chrome靠谱。
按F12出来后F5刷新下出来如下画面:
type是gif跟png的直接pass,其他点开进去之后没有得到什么信息,嗯,事实上也没什么有用的东西。XHR这页是空的,OK,这时可以往下拉网页直到出来新的图片之后F5刷新下会看到XHR里有了信息,就是下面这个
打开之后可以看到很多类似这样的网址,而这个就是新的图片的二级链接。(你可以随便点开个图片会发现网页格式)
"http:\/\/tu.duowan.com\/gallery\/136245.html\"然后观察下offset=30会发现offset之后的数字标志页码,随便更改一个之后可以打开类似的网页,说明想法是正确的。接下来就是更改代码了。网上教程一大堆就不说了