scrapy框架小白实战--爬取煎蛋妹纸图

看了好多的这个项目的帖子,但是该网站(http://i.jandan.net/)【妹纸图】好像最近修改了一下,就是图片需要加载之后才能显示出图片的地址,不然总是取不到图片的地址,所以本人采用了selenium框架(不清楚这个框架的小伙伴可以看看大佬的文章https://cuiqingcai.com/2599.html)。


网站翻页是有规律的

第一页:http://i.jandan.net/ooxx/page-1#comments

第二页:http://i.jandan.net/ooxx/page-2#comments

第三页:http://i.jandan.net/ooxx/page-3#comments

url = "http://i.jandan.net/ooxx/page-"
page = 1
start_urls = [url + str(page) + "#comments"]

首先可以爬取总也数,然后通过for循环拼凑url就可以得到全部的url地址。(我个人比较懒直接就取了总页数为10,没有爬取总页数)

通过查看网站源代码,可以找到图片的地址。



1.(默认已准备好环境)打开cmd,输入scrapy startproject project_name立刻在此目录下创建一个名称为project_name的工程。可以打开pycharm,并导入该工程。


2.编写items.py文件。因为要爬取煎蛋妹纸图,所以首先获得图片的地址。所以在items.py文件定义一个变量img_url。

import scrapy
class PicsOfJandanItem(scrapy.Item):
    img_url = scrapy.Field()

3.编写spider。在cmd中输入scrapy genspider spider_name object_url。其中spider_name是你的爬虫名称,object_url是爬虫爬取网页的范围。



    然后就可以开始编写自己的爬虫。请注意name='picsDemo'!请注意name='picsDemo'!请注意name='picsDemo'!,后面会提到其用处。

import scrapy
from pics_of_jandan.items import PicsOfJandanItem
from selenium import webdriver

class PicsdemoSpider(scrapy.Spider):
    name = 'picsDemo'
    allowed_domains = ['jandan.net']
    url = "http://i.jandan.net/ooxx/page-"
    page = 1
    start_urls = [url + str(page) + "#comments"]

    def parse(self, response):
        browser = webdriver.Chrome()
        browser.maximize_window()
        browser.get(response.url)
        browser.implicitly_wait(15)
        a_list = browser.find_elements_by_link_text("[查看原图]")
        for a in a_list:
            item = PicsOfJandanItem()
            print(a.get_attribute('href'))
            item['img_url'] = a.get_attribute('href')
            yield item
        if self.page < 10:
            self.page += 1
        yield scrapy.Request(self.url + str(self.page) + "#comments",self.parse)


4.编写pipelines.py文件,就是将得到数据保存到一个固定的地方。

import requests

class PicsOfJandanPipeline(object):
    count = 1
    def process_item(self, item, spider):
        result = requests.get(item['img_url'])
        with open("H:/pictures/pics_jandan/"+str(self.count)+".jpg",'wb') as f:
            f.write(result.content)
            f.close()
        self.count += 1
        return item

5.要使pipelines.py文件工作需要修改下settings.py文件的内容。



6.最后是运行爬虫,有两种方式。一种是在cmd中输入scrapy crawl picsDemo(在步骤3中的name="picsDemo"),千万不能弄错。第二种是在工程项目的根目录下创建一个新文件test_pics_of_jandan.py。

from scrapy.cmdline import execute
execute(['scrapy','crawl','picsDemo'])

然后直接运行该文件即可。本人就是使用第二种方法。(可以直接在pycharm上看到结果)

7.最后得到的结果。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用分布式scrapy-redis进行爬取豆瓣电影top250,需要进行以下步骤: 1. 安装ScrapyScrapy-Redis 首先需要安装ScrapyScrapy-Redis,可以使用以下命令进行安装: ``` pip install scrapy pip install scrapy-redis ``` 2. 配置Redis数据库 配置Redis数据库,用于存储爬虫的请求队列和爬取结果。可以在本地搭建一个Redis服务器,也可以使用云服务提供商提供的Redis服务。 3. 创建Scrapy项目 使用命令行工具创建Scrapy项目: ``` scrapy startproject douban_top250 ``` 4. 配置Scrapy-Redis 在settings.py文件中添加以下配置信息: ``` # 开启Redis调度器 SCHEDULER = "scrapy_redis.scheduler.Scheduler" # 去重过滤器,使用Redis数据库进行去重 DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter" # 将爬取到的数据存储到Redis数据库中 ITEM_PIPELINES = { "scrapy_redis.pipelines.RedisPipeline": 300 } # Redis数据库连接配置 REDIS_HOST = 'localhost' REDIS_PORT = 6379 ``` 5. 创建Spider 在spiders目录下创建一个名为douban.py的Spider文件,编写爬取代码,例如: ``` from scrapy_redis.spiders import RedisSpider class DoubanSpider(RedisSpider): name = 'douban' allowed_domains = ['movie.douban.com'] redis_key = 'douban:start_urls' def parse(self, response): # 爬取代码 ``` 6. 启动爬虫 在命令行中启动爬虫: ``` scrapy crawl douban ``` 爬虫会自动将请求放入Redis数据库中,多个爬虫节点可以同时从Redis数据库中获取请求进行爬取,实现分布式爬取
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值