我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Seleninum&PhamtomJS爬取煎蛋网妹子图

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Seleninum&PhamtomJS爬取煎蛋网妹子图

目标网站:

需要爬取的网站:http://jandan.net/ooxx

blob.png


目标分析:

先找到总页数,即可以利用selenium的模拟点击到下一个页面

blob.png


找到每个图片的地址:

右键检查图片的代码,找到图片的代码

blob.png



爬虫代码:

创建一个getJianDan.py文件,代码如下:

#!/usr/bin/env python
# coding: utf-8
from selenium import webdriver
from mylog import MyLog as mylog
import json
import os
import urllib.request
import time


class GetJianDan(object):
    """the all data from jandan.net
    所有数据来自煎蛋网
    """
    def __init__(self):
        self.startUrl = 'http://jandan.net/ooxx'
        self.log = mylog()
        self.browser = self.getBrowser()
        self.getPageNext(self.browser)

    def getBrowser(self):
        try:
            # 方法一: 指定PhantomJS的路径
            #browser = webdriver.PhantomJS(executable_path=r"D:\phantomjs-2.1.1-windows\bin\phantomjs.exe")
            # 方法二: 复制PhantomJS.exe到C:\Python35目录下(Python安装目录下)
            browser = webdriver.PhantomJS()
            browser.get(self.startUrl)   # 打开目标网站
            browser.implicitly_wait(20)  # 等待js代码加载完毕
        except Exception as e:
            self.log.error('open the %s failed:%s' % (self.startUrl, e))
        else:
            return browser

    def saveImg(self, browser):
        # 找到所有图片的标签,返回一个list
        elements = browser.find_elements_by_xpath('//ol[@class="commentlist"]//div[@class="row"]\
        //div[@class="text"]')
        for element in elements:
            class="lazy" data-src = element.find_element_by_xpath("./p//img").get_attribute('class="lazy" data-src')    # img 下载地址
            imgName = element.find_element_by_xpath("./span/a").text    # img 名字
            suffix_name = os.path.splitext(class="lazy" data-src)[1]  # img后缀名
            # 判断图片后缀是否为.gif,如果是则获取org_class="lazy" data-src属性
            if suffix_name == '.gif':
                # 重新赋值给class="lazy" data-src,这样爬取的才是动态的gif图片
                class="lazy" data-src = element.find_element_by_xpath("./p//img").get_attribute('org_class="lazy" data-src')
            full_name_img = imgName + suffix_name  # img完整名字
            try:
                # 下载图片,需要传入(图片下载地址,img完整名字带后缀名)
                urllib.request.urlretrieve(class="lazy" data-src, full_name_img)
                time.sleep(1)  # 设置下载延迟,防止被封
            except Exception as e:
                self.log.error('%s download failed, %s' % (full_name_img, e))
            else:
                self.log.info('%s download success' % full_name_img)

    def createDir(self, dirName):
        """创建目录"""
        if os.path.exists(dirName):
            self.log.error('create directory %s failed, have a sane name file or directory' % dirName)
        else:
            try:
                os.makedirs(dirName)
            except Exception as e:
                self.log.error('create directory %s failed : %s' % (dirName, e))
            else:
                self.log.info('create directory %s success' % dirName)

    def getPageNext(self, browser):
        # 获取总页数
        sumPage = json.loads(browser.find_element_by_xpath("//div[@class='comments']/\
        div[@class='cp-pagenavi']/span[last()]").text)
        cartoonTitle = browser.title  # 获取目录名
        self.createDir(cartoonTitle)  # 创建存储图片目录
        os.chdir(cartoonTitle)  # 进入创建的目录
        i = 1
        while i <= sumPage[0]:
            self.saveImg(self.browser)
            i += 1
            self.log.info('开始爬取第%d页' % i)
            # 利用selenium点击下一页,获取下一页的内容
            NextTag = browser.find_element_by_partial_link_text("下一页").click()
            browser.implicitly_wait(30)  # 等待加载js代码
            time.sleep(3)
        self.log.info('save img success')
        browser.quit()


if __name__ == '__main__':
    st = GetJianDan()


mylog.py日志文件代码如下:

#!/usr/bin/env python
# coding: utf-8
import logging
import getpass
import sys


# 定义MyLog类
class MyLog(object):
    def __init__(self):
        self.user = getpass.getuser()  # 获取用户
        self.logger = logging.getLogger(self.user)
        self.logger.setLevel(logging.DEBUG)

        # 日志文件名
        self.logfile = sys.argv[0][0:-3] + '.log'  # 动态获取调用文件的名字
        self.formatter = logging.Formatter('%(asctime)-12s %(levelname)-8s %(message)-12s\r\n')

        # 日志显示到屏幕上并输出到日志文件内
        self.logHand = logging.FileHandler(self.logfile, encoding='utf-8')
        self.logHand.setFormatter(self.formatter)
        self.logHand.setLevel(logging.DEBUG)

        self.logHandSt = logging.StreamHandler()
        self.logHandSt.setFormatter(self.formatter)
        self.logHandSt.setLevel(logging.DEBUG)

        self.logger.addHandler(self.logHand)
        self.logger.addHandler(self.logHandSt)

    # 日志的5个级别对应以下的5个函数
    def debug(self, msg):
        self.logger.debug(msg)

    def info(self, msg):
        self.logger.info(msg)

    def warn(self, msg):
        self.logger.warn(msg)

    def error(self, msg):
        self.logger.error(msg)

    def critical(self, msg):
        self.logger.critical(msg)


if __name__ == '__main__':
    mylog = MyLog()
    mylog.debug(u"I'm debug 中文测试")
    mylog.info(u"I'm info 中文测试")
    mylog.warn(u"I'm warn 中文测试")
    mylog.error(u"I'm error 中文测试")
    mylog.critical(u"I'm critical 中文测试")


运行主程序getJianDan.py

Pycharm运行结果

XF[RNQW%82TFWANO~F8%9(4.png


下载图片截图:

blob.png


代码分析:

mylog.py  日志模块,记录一些爬取过程中的信息,在大量爬取的时候,没有log帮助定位,很难找到错误点


主程序:

getJianDan.py 主程序

getBrowser  打开目标网站,并返回内容

saveImg  处理每个页面img,并下载

createDir   创建图片保存目录

getPageNext  模拟用户点击下一页行为,发起新的请求

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Seleninum&PhamtomJS爬取煎蛋网妹子图

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Seleninum&PhamtomJS爬取煎蛋网妹子图

目标网站:需要爬取的网站:http://jandan.net/ooxx 目标分析:先找到总页数,即可以利用selenium的模拟点击到下一个页面找到每个图片的地址:右键检查图片的代码,找到图片的代码爬虫代码:创建一个getJianDan.p
2023-01-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录