利用Selenium爬取煎蛋网妹纸图原来是这么简单!!!


本文代码依旧采用模块化程序设计思想,设计了三个模块来完成不同的功能,分别是上述三个模块,接下来,简单干脆,进入主题,一起分析完成代码操作吧!!

获取页面url信息

  • 也许还是思考这个模块有什么作用呢,噢,是这样子的!本模块是将基本的页面所包含的几个页面的链接解析并保存下来。
    在这里插入图片描述
  • 下面我们就要对网页进行分析,首先打开开发者模式(快捷键为F2),对需要解析的页面进行定位,也就是点击左上角的符号,将鼠标拖拽到页码的位置,就会在页面源码中发现页面保存的位置,得到页码保存的位置,就可以将其解析出来。
    在这里插入图片描述
  • 上面我们发现了页码其实对应的是url链接,我们将其解析出来,在后面的模块中将逐一获取每一个url对应的图片的信息。我们通过观察发现所有的url都保存在div class = “cp-pagenavi” 下面的 a 标签里面。所以我们只要将 a 标签里买你的 href 属性里面的内容解析出来,就是我们需要的url 链接。
    在这里插入图片描述那么我们直接上代码,都已经说得很清楚了~~~~~
def get_url_list():
    try:
        browser = webdriver.Firefox()
        browser.get('http://jandan.net/ooxx')
        url = browser.find_element_by_class_name('cp-pagenavi')
        href = url.find_elements_by_tag_name('a')
        href_list = []
        for idx,ele in enumerate(href):
            url = ele.get_attribute('href')
            href_list.append(url)
            print(f'url_{idx}: {ele.get_attribute("href")}')
        time.sleep(1 + random.random())
        #print(href_list)
        return href_list

    except NoSuchAttributeException:
        print('No Element!')
    finally:
        browser.close()

获取图片url信息

  • 这个模块将每一个url链接中的所有图片的链接保存下来,在后面的模块中将其进行保存。那么来看 ,我们打算保存的是图片的原图,所有的图片连接都保存在文本内容是 [查看原图]a 标签里面。我们只要将 a 标签的 href 属性里面的内容解析出来,就是我们需要的图片的地址链接,而且这样做的话也不需要进行异常处理,程序只是检测所有的【查看原图】,更加具有稳定性。
    在这里插入图片描述还是来直接看代码~~~~~~
def get_img_list(url):
    try:
        browser = webdriver.Firefox()
        browser.get(url)
        ol = browser.find_elements_by_partial_link_text('[查看原图]')
        img_list = []
        for idx,ele in enumerate(ol):
            url = ele.get_attribute('href')
            img_list.append(url)
            print(f'ol_{idx}:{ele.get_attribute("href")}')
        #print(img_url)
        return img_list
    finally:
        browser.close()

永久性保存图片

  • 这个模块是将保存下来的图片的链接地址进行请求,将二进制的图片进行可视化存储。我们首先通过os库在根目录下面创建一个文件夹保存所有的图片,其次将图片的链接进行请求,保存图片。
    原理就是这么一个原理,直接上代码!!!
def save_img_list(message):
    if not os.path.exists('./img_Libs'):
        os.mkdir('./img_Libs')

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
    }
    for img in message:
        try:
            response = requests.get(url=img, headers=headers)
            if response.status_code == 200:
                response.encoding = response.apparent_encoding
                img_data = response.content
        except TimeoutError:
            print('请求超时!!!')

        img_path = './img_Libs/' + img.split('/')[-1]
        #print(img_path)
        with open(img_path,'wb') as fp:
            fp.write(img_data)
    print('All pictures is successfully!!')

注释:

  1. 本文采用了selenium进行页面的自动化爬取,它是一个自动化测试工具。本文以Firefox进行爬取,在使用之前请确保安装好Firefox浏览器并配置好geckodriver。另外,还需要正确安装好Python的Selenium库。
  2. selenium的安装
    最简单的方法使用pip安装:pip install selenium
  3. GeckoDriver的安装
    下载地址:https://github.com/mozilla/geckodriver/releases
    下载完成之后,将geckodriver.exe文件拖拽到Python的Scripts目录下面。
  4. 上全部源代码。
import time
import random
import requests
import os
from selenium import webdriver
from selenium.common.exceptions import NoSuchAttributeException

def get_url_list():
    try:
        browser = webdriver.Firefox()
        browser.get('http://jandan.net/ooxx')
        url = browser.find_element_by_class_name('cp-pagenavi')
        href = url.find_elements_by_tag_name('a')
        href_list = []
        for idx,ele in enumerate(href):
            url = ele.get_attribute('href')
            href_list.append(url)
            print(f'url_{idx}: {ele.get_attribute("href")}')
        time.sleep(1 + random.random())
        #print(href_list)
        return href_list

    except NoSuchAttributeException:
        print('No Element!')
    finally:
        browser.close()

def get_img_list(url):
    try:
        browser = webdriver.Firefox()
        browser.get(url)
        ol = browser.find_elements_by_partial_link_text('[查看原图]')
        img_list = []
        for idx,ele in enumerate(ol):
            url = ele.get_attribute('href')
            img_list.append(url)
            print(f'ol_{idx}:{ele.get_attribute("href")}')
        #print(img_url)
        return img_list
    finally:
        browser.close()

def save_img_list(message):
    if not os.path.exists('./img_Libs'):
        os.mkdir('./img_Libs')

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
    }
    for img in message:
        try:
            response = requests.get(url=img, headers=headers)
            if response.status_code == 200:
                response.encoding = response.apparent_encoding
                img_data = response.content
        except TimeoutError:
            print('请求超时!!!')

        img_path = './img_Libs/' + img.split('/')[-1]
        #print(img_path)
        with open(img_path,'wb') as fp:
            fp.write(img_data)
    print('All pictures is successfully!!')

def main():
    href_list = get_url_list()
    for url in href_list:
        img_list = get_img_list(url)
        save_img_list(img_list)
        print('Everything is done!!!')

if __name__ == '__main__':
    main()

想要获取GeckoDriver安装包的小伙伴,可以给博主留言或者搜索公众号 Crawler 乐趣

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值