吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 8876|回复: 25
收起左侧

[Python 转载] (新手)Scrapy爬取煎蛋妹子图

[复制链接]
笨笨猪 发表于 2018-8-11 19:30
来社区也已经20来天了,看到各位大佬操作猛如虎,我这个新手只能躲在角落里默默鼓掌

编程区里面看到很多大佬分享心得

有目录式的:一篇一篇,由浅入深;
有项目式的,一篇一个项目

今天小弟我,分享一下爬取煎蛋网的妹子图心得

QQ截图20180811191945.jpg (第一次发帖,不知道清不清楚)
——————————————————————————————————————————————————————————————————

贴出网址,http://jandan.net/ooxx
进cmd建立一个scrapy项目,然后再创建一个spider,语法可以在网上查到

在item中创建我们需要取到的信息对象
[Python] 纯文本查看 复制代码
import scrapy


class JiandanpItem(scrapy.Item):
    img_name = scrapy.Field()
    img_url = scrapy.Field()
这里我就创建了两个

在爬虫spider里就是重头戏了,使用xpath,css等选择器爬取网页中有用的信息,如下:

[Python] 纯文本查看 复制代码
# -*- coding: utf-8 -*-
import scrapy
import base64
from jiandanP import items


class JiandanSpider(scrapy.Spider):

    name = 'jiandan'
    allowed_domains = ['jandan.net']
    start_urls = ['http://jandan.net/ooxx']

    def parse(self, response):
        img = response.xpath('//div[@id="comments"]/ol[@class="commentlist"]/li[@id]')
        for i in img:
            img_name = i.xpath('.//span[@class="righttext"]/a/text()').get()
            img_hash = i.xpath('.//p//span[@class="img-hash"]/text()').get()
            img_url_raw = base64.b64decode(img_hash)
            img_url = 'https:' + str(img_url_raw, encoding='utf-8')
            item = items.JiandanpItem(img_name=img_name, img_url=img_url)
            print(item)
            yield item

        #next_url = response.xpath('/html/body/div[2]/div[2]/div[1]/div[2]/div[3]/div/a[last()]/@href').get()
        url = response.css('a[class="previous-comment-page"]::attr(href)')[1].get()
        print('rushang')
        next_url = 'https:' + url
        if next_url:
            print('next_url存在, 正在下载' + next_url + '数据')
            yield scrapy.Request(url=next_url, callback=self.parse)




下面的一个next_url,存在不足,就是在第一页的时候不能够找到这个标签。。(也没有报错不知道为啥)

其实重点也就是,图片链接被js文件中的函数进行加密了而已,使用到了两个函数。

在这里我们发现只需要base64库中的函数进行解码就可以

最后是保存了,在pipeline中函数如下:

[Python] 纯文本查看 复制代码
# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html
import requests
import os

class JiandanpPipeline(object):
    def process_item(self, item, spider):
        path = os.path.abspath('..')
        save_path = path + '\\img' 
        if not os.path.exists(save_path):
            os.mkdir(save_path)
            print('文件夹创建成功!')
        img_url = item['img_url']
        img_name = item['img_name']
        save_img = save_path + '\\' + img_name +'.jpg'
        r = requests.get(img_url)

        print('正在下载图片%s......' % img_name)

        with open(save_img, 'wb') as f:
            f.write(r.content)
        f.close()


代码的可变性比较大,比如说图片的命名,保存路径等。

主要自己对煎蛋网的网页源代码摸得不太熟,希望有大佬可以不吝赐教。




免费评分

参与人数 4吾爱币 +3 热心值 +4 收起 理由
风之語 + 1 + 1 用心讨论,共获提升!
腿妹阿 + 1 来自编程入门的小萌新给你加油哦~
lilihuakai + 1 + 1 用心讨论,共获提升!
第八-奋斗 + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Avenshy 发表于 2018-8-11 20:06
值得像我这样的python萌新学习
lc5715232 发表于 2018-8-11 20:36
林麥蒙 发表于 2018-8-12 08:43 来自手机
真爱贤 发表于 2018-8-12 09:24
妹子,妹子,我要妹子
陈家丶妖孽 发表于 2018-8-12 09:55
可以,不错。一上手就用了scrapy框架。我还是看resquests,BeautifulSoup.等这些基础的语法。
lttzz 发表于 2018-8-12 10:43
(前排提醒, linux需要修改path里的'\\'
ph3ngz0r 发表于 2018-8-30 17:22
这么简单,学习下
zhu1123 发表于 2018-8-30 19:17
水印怎么破.....
sun8061 发表于 2018-8-31 09:03
感谢分享        
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 18:01

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表