Scrapy爬了三千张超养眼美女私房照!

共 2985字,需浏览 6分钟

 ·

2021-08-25 15:39

文 | 酷头

来源:印象python「ID: python_logic」
嗨!大家好,我是酷头
欢迎来到学习python的宝藏基地~~~
130bdc8c1826a35372ab9e38320e4104.webp



长按下方二维码可以添加我为好友哦


eaf03f50bbd7935ff853c1c138afe0c1.webp



第一次对scrapy做了简单的了解并且使用scrapy实战爬取了B站单页小姐姐视频信息。详情如下:
Scrapy爬取B站小姐姐入门教程,结果万万没想到!

第二次使用scrapy翻页爬取了糗事百科13页的段子信息Scrapy翻页爬取糗事百科所有段子后,我总结出的...

今天我们使用scrapy爬取美女网92页小姐姐图片,先来看结果:

16f62c5a7fedb3810d7905f1673efc08.webp



7a10630c9fd4c6589eaed63e0d3874c4.webp



接下来我们来看看我是如何得到这些小姐姐美照的。


1. 确定目标:打开美女目录栏。我们要获取美女的照片、标题、标签和点击之后对应的图片链接。
50d46b2c191a9df1b3cdb0333d193940.webp



2. 我们使用命令 


scrapy startproject mnxz

 建立一个名称为mnxz的新工程。如下:


a28a9f399cbbfa13e8f16ed34816fbec.webp

2ab2eeea5b48cc3fc9e3620b05958084.webp



3. 使用命令


scrapy genspider spider_mn https://www.mn52.com/meihuoxiezhen/list_2_1.html


创建一个名称为spider_mn 的爬虫文件


b201bf1dfb57143462132c1261298fac.webp



4. 工程建立好了接下来咱们来写代码,

首先是咱们的实体类items。获取的数据有四个如下:


  pic = scrapy.Field()    # 图片内容
  url = scrapy.Field()    # 图片链接
  title = scrapy.Field()  # 图片标题
  label = scrapy.Field()  # 图片标签



5. 接下来就在爬虫文件spider_mn来实现具体的爬取。

然后使用yield将数据流向管道文件pipelines中。


 # 获取当前页面所有信息
    divs = response.xpath("//div[@class='col-md-3 col-sm-6']/div[@class='item-box']")
  
    for div in divs:
        item['title'] = div.xpath('./a/@title').get()                # 图片标题

        pic = div.xpath("./a/div[@class='item-media entry']/img/@src").get()
        item['pic'] = 'https:' + pic                                 # 图片信息

        url = div.xpath('./a/@href').get()
        item['url'] = 'https:' + url                                 # 对应大图链接

        label = div.xpath('./div[@class="tags"]/a/text()').getall()

        item['label'] = '、'.join(label)                              # 图片对应标签

        yield item



6. 在pipeline中对文件进行保存。

一方面我们要保存我们获取到的美女的照片、标题、标签和点击之后对应的图片链接四个数据存放在json文件中;

另一方面我们要将图片单独存放在images文件夹中。


def process_item(self, item, spider):
        print(item['title'])
        print(item['pic'])
        print(item['url'])
        print(item['label'] + '\n')

        # 保存文件到本地
        with open('./beauty_girls.json''a+', encoding='utf-8'as f:
            lines = json.dumps(dict(item), ensure_ascii=False) + '\n'
            f.write(lines)

        if not os.path.exists('images'):
            os.mkdir('images')

        # 保存图片到本地
        with open('images/{}.jpg'.format(item['title']), 'wb'as f:
            req = requests.get(item['pic'])
            f.write(req.content)
            time.sleep(random.random()*4)

        return item



7. 接下来我们打开setting进行如下设置:


# Obey robots.txt rules
ROBOTSTXT_OBEY = False

# Override the default request headers:
DEFAULT_REQUEST_HEADERS = {
   'Accept''text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
   'Accept-Language''en',
   'User-Agent': str(UserAgent().random)
}

# Configure item pipelines
# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
    'mnxz.pipelines.MnxzPipeline'300,
}



8. 同样我们最后来运行main文件。可以成功的获取到当前页面数据。


from scrapy import cmdline

cmdline.execute('scrapy crawl spider_mn -s LOG_FILE=all.log'.split())


02c708adf2f1f31df1075671ecc8ddce.webp



9. 我们可以看到小姐姐照片总共有92页,

咱们的目标就是全部照片。接下来就是使用循环来获取多页数据了。


996e27c45bb1b1ffdf06a7292f156431.webp


 def start_requests(self):
        # 获取翻页URL
        for page in range(192 + 1):
            url = r'https://www.mn52.com/meihuoxiezhen/list_2_{}.html'.format(str(page))  # 提取翻页链接
            yield scrapy.Request(url, callback=self.parse, dont_filter=False)



c2f15700d93e22c46e2ea4e06ec18745.webp

e76495c61bd4b0f414c47c4a36144155.webp

09bd1e856fed40e3ae7d32f320284240.webp

b4d75a22a7dcccf069ff4987a26a5699.webp

获取到的图片


加入循环之后我们就可以获取到全部小姐姐图片啦


浏览 84
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报