python来爬取煎蛋网随手拍小姐姐图片

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

作者:程序员喧啸

本文使用了requests模块进行发送请求,使用了BeautifulSoup模块对网页进行解析,在使用之前首先安装这两个第三方库;方法如下:

1. 安装requests库

pip install requests

2. 安装bs4库

pip install bs4

PS:如有需要Python学习资料的小伙伴可以加下方的群去找免费管理员领取

 

可以免费领取源码项目实战视频PDF文件

python来爬取煎蛋网随手拍小姐姐图片_第1张图片

 

首先

我们打开煎蛋网,看到了首页上面有信息---随手拍,而我们的主要任务就是爬取随手拍的图片将其进行保存。

忘了说,网址是这个

http://jandan.net/ooxx/MjAyMDA4MDctMTMz#comments

python来爬取煎蛋网随手拍小姐姐图片_第2张图片

 

接下来

开始分析网页源代码,提取相关信息。那我们以什么样的思路来进行爬虫的设计呢?稍加思考,聪明的你立即有了想法,我们首先爬取整张网页的信息,之后在该网页中提取原图的保存地址,最后通过请求图片的地址,将图片进行保存。我们大体上有了一个思路,开始最有趣并且好玩的代码编写吧。

  • 首先右击页面选择审查元素(快捷键为Fn+F12),之后再点击左上角的定位符号来定位图片被存在哪一个标签里面。
  • 其次我们要将该页面的源码爬取下来,以便于下一步解析网页,直接上代码来分析。

对以下代码的注释:

  1. 我们可以看到定义了一个函数get_totle_page(url),说的高大上一点,我们采用了模块化的程序设计思想;
  2. 此处我们说另外一个高大上的名词,即UA伪装,现在好多网站都建立了反爬虫机制,UA伪装便是为了告诉浏览器我们的身份是一个浏览器,而不是一个爬虫,防止被限制访问。
  3. global headers 由于接下来我们需要访问图片的地址,发送请求信息将其存储下来,所以我们将headers定义为全局变量,方便请求图片的时候使用。
  4. 很明显,程序中我们还加入了异常处理机制,可以这么理解,当程序连接失败的时候进行异常处理,返回值为None。
def get_totle_page(url):
    global headers
    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'
    }
    try:
        response = requests.get(url ,headers =headers)
        if response.status_code == 200:
            return response.text
    except requests.ConnectionError:
        print("请求数据失败!!!")
        return None

通过以上的操作,我们发现图片存储在

里面的
    下的每个
  1. 标签里面。其原图的地址保存在
  2. 里面的
  3. 标签里面,所以在解析的过程我们需要跳过保存广告的
  4. 标签进行解析图片,所以我们加入了异常处理机制,若
  5. 标签里面没有
    ,直接跳过该标签,解析下一个
  6. 标签。

    python来爬取煎蛋网随手拍小姐姐图片_第3张图片

     

    最后,我们将保存着图片地址的连接都保存在了列表totle_list里面。

    再下来

    我们就需要将解析的图片地址链接进行二进制数据的本地存储了,为了保持我们一贯的整洁作风,咳咳咳,此处需要来一张图修饰一下······

    python来爬取煎蛋网随手拍小姐姐图片_第4张图片

     

    我们创建一个文件夹来存放所有的照片。

    有意无意的插上一句,os库是python的内置库,在使用之前不需要特殊进行安装,调用即可。

        if not os.path.exists('./picture_Libs'):
            os.mkdir('./picture_Libs')

    接下来进行请求图片的地址链接,将图片进行本地的保存。

    1. 循环遍历请求totle_list里面保存的图片的地址链接,图片是二进制文件,所以使用了response.content。
    2. img_path = './picture_Libs/' + totle.split('/')[-1]

    对于该语句是说明了图片的本地保存地址,我们选的是新建的文件夹下面,用split()语句以“/”对地址连接进行分割,选择分割之后的最后一部分作为图片的名字来进行保存。

        for totle in totle_list:
        
            try:
                response = requests.get(url=totle, headers=headers)
                if response.status_code == 200:
                    response.encoding = response.apparent_encoding
                    img_data = response.content
            except TimeoutError:
                print('请求超时!!!')
    
            img_path = './picture_Libs/' + totle.split('/')[-1]
            #print(img_path)
            with open(img_path,'wb') as fp:
                fp.write(img_data)

    最后

    我们通过主函数将我们的各个功能模块串联起来,话不多说,上完整代码啦。

    1. 我爬取的url是"http://jandan.net/ooxx/MjAyMDA4MDctMTI" +str(i) + "#comments"
    2. 在爬取煎蛋网随手拍的时候,可自行去观察url的不同,来寻找规律,来构建url进行爬取。
    import requests
    from bs4 import BeautifulSoup
    import lxml
    import os
    
    def get_totle_page(url):
        global headers
        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'
        }
        try:
            response = requests.get(url ,headers =headers)
            if response.status_code == 200:
                return response.text
        except requests.ConnectionError:
            print("请求数据失败!!!")
            return None
    
    def get_content_page(html):
        soup = BeautifulSoup(html,"lxml")
        totle_list = []
        div = soup.find('div',attrs = {'id':'comments'})
        ol_list = div.find(name = 'ol')
    
        for ol in ol_list.find_all(name = 'li'):
            try:
                text_list = ol.find('div',attrs = {'class':'text'})
                #print(text_list)
                global a_list
                a_list = 'http:' + text_list.p.a['href']
                #print(a_list)
                totle_list.append(a_list)
            except:
                pass
        #print(totle_list)
        return totle_list
    
    def save_img_list(message):
        if not os.path.exists('./picture_Libs'):
            os.mkdir('./picture_Libs')
        for totle in message:
            try:
                response = requests.get(url=totle, headers=headers)
                if response.status_code == 200:
                    response.encoding = response.apparent_encoding
                    img_data = response.content
            except TimeoutError:
                print('请求超时!!!')
    
            img_path = './picture_Libs/' + totle.split('/')[-1]
            #print(img_path)
            with open(img_path,'wb') as fp:
                fp.write(img_data)
    
    def main():
        for i in range(6):
            url = "http://jandan.net/ooxx/MjAyMDA4MDctMTI" +str(i) + "#comments"
        html = get_totle_page(url)
        message = get_content_page(html)
        #print(html)
        save_img_list(message)
        
    if __name__ == "__main__":
        main()

    运行程序之后,我们发现了好多好看的小姐姐保存在了我创建的文件夹里面,哇,没想到一打开一张就是一个背影杀手呀,我这该死的运气。

    python来爬取煎蛋网随手拍小姐姐图片_第5张图片

你可能感兴趣的:(爬虫,python,编程语言)