首页 编程教程正文

(新手)Scrapy爬取煎蛋妹子图

piaodoo 编程教程 2020-02-22 22:09:15 1013 0 python教程

本文来源吾爱破解论坛

来社区也已经20来天了,看到各位大佬操作猛如虎,我这个新手只能躲在角落里默默鼓掌嗨学网

编程区里面看到很多大佬分享心得
有目录式的:一篇一篇,由浅入深;有项目式的,一篇一个项目
今天小弟我,分享一下爬取煎蛋网的妹子图心得

QQ截图20180811191945.jpg (372.1 KB, 下载次数: 3)

下载附件  保存到相册

2018-8-11 19:20 上传

(第一次发帖,不知道清不清楚)
——————————————————————————————————————————————————————————————————
贴出网址,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()


代码的可变性比较大,比如说图片的命名,保存路径等。
主要自己对煎蛋网的网页源代码摸得不太熟,希望有大佬可以不吝赐教。嗨学网



版权声明:

本站所有资源均为站长或网友整理自互联网或站长购买自互联网,站长无法分辨资源版权出自何处,所以不承担任何版权以及其他问题带来的法律责任,如有侵权或者其他问题请联系站长删除!站长QQ754403226 谢谢。

有关影视版权:本站只供百度云网盘资源,版权均属于影片公司所有,请在下载后24小时删除,切勿用于商业用途。本站所有资源信息均从互联网搜索而来,本站不对显示的内容承担责任,如您认为本站页面信息侵犯了您的权益,请附上版权证明邮件告知【754403226@qq.com】,在收到邮件后72小时内删除。本文链接:https://www.piaodoo.com/7713.html

搜索