Python爬虫入门-scrapy爬取唯一图库高清壁纸

来源:互联网 发布:ubuntu开机自启动mongo 编辑:程序博客网 时间:2024/05/29 09:57

首先,就是进入到唯一图库,点击上面的高清壁纸项目:

分析-00.png

进入之后,下拉,发现是正常的下拉没有Ajax加载,拉到最后面点击末页,可以看出这个栏目里面总共有292页:

分析-01.png

翻页看一下URL有什么变化,可以发现只有最后面代表这个页码的数字在发生变化:

分析-02.png

打开F12,刷新,在原始请求代码里面有能进入到进入详情页的链接地址,可以抓取下来:

分析-03.png

打开任意一张图片,进入到详情页码中,同样的F12,再刷新页面,里面有几个重要的信息我们要进行提取的,一个就是详情页的总页数,一个是标题,还有一个就是原图的下载地址,在原始请求的源代码中同样也能够找到相应的信息:

分析-04.png

分析-05.png

这里面还有分两种情况,一种就是总页数为一张的就不需要进行翻页,而对于总也是大于一张的图片就要再进行遍历,可以发现翻页时URL会发生变化:
http://www.mmonly.cc/gqbz/dmbz/xxxxx_i.html

经过分析以后就可以写代码了:

mmonly.py:

import scrapyfrom scrapy.http import Requestfrom weiyiwang.items import WeiyiwangItemclass MmonlySpider(scrapy.Spider):    name = 'mmonly'    allowed_domains = ['mmonly.cc']    start_urls = ['http://www.mmonly.cc/gqbz/list_41_{}.html'.format(i) for i in range(1,293)]    def parse(self, response):        links=response.css('.item.masonry_brick.masonry-brick')        for link in links:            detail_url = link.css('.ABox a::attr(href)').extract_first()            pages=link.css('.items_likes::text').re_first('共(.*)张')            if pages==1:                url=detail_url                yield Request(url=url, callback=self.parse_detail)            else:                for i in range(1,int(pages)):                    url=detail_url.split('.html')[0]+'_{}.html'.format(i)                    yield Request(url=url,callback=self.parse_detail)    def parse_detail(self,response):        item=WeiyiwangItem()        item['title']=response.css('.wrapper.clearfix.imgtitle h1::text').extract_first()        item['img_url']=response.css('.big-pic a img::attr(src)').extract_first()        yield item

最后的结果是存储至Mongodb:

pipeline.py:

import pymongoclass MongoPipeline(object):    def __init__(self,mongo_uri,mongo_db):        self.mongo_uri=mongo_uri        self.mongo_db=mongo_db    @classmethod    def from_crawler(cls,crawler):        return cls(            mongo_uri=crawler.settings.get('MONGO_URI'),            mongo_db=crawler.settings.get('MONGO_DB')        )    def open_spider(self,spider):        self.client=pymongo.MongoClient(self.mongo_uri)        self.db=self.client[self.mongo_db]    def close_spider(self,spider):        self.client.close()    def process_item(self, item, spider):        self.db['weiyi'].insert(dict(item))        return item

分析-06.png

原创粉丝点击