Python   发布时间:2022-04-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了【Python爬虫】尺度太大了!爬一个专门看小姐姐的网站,写一段紧张刺激的代码(附源码)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

前言

今天我们通过Python爬取小姐姐图片网站上的美图,零基础学会通用爬虫,当然我们还可以实现多线程爬虫,加快爬虫速度

环境介绍

  • python 3.6
  • pycharm
  • requests >>> pip install requests
  • re
  • time
  • concurrent.futures

 

@L_618_2@爬虫最基本思路

爬取单个相册内容:

  1. 找到目标 https://https://www.kanxiaojiejie.com/img/6509
  2. 发送请求 (人为操作: 访问网站)
  3. 获取数据 (HTML代码 就是服务器返回的数据)
  4. 数据提取 (筛选里面的内容)
    HTML网页代码
  5. 保存数据 (把图片下载下来)

目标网站

【Python爬虫】尺度太大了!爬一个专门看小姐姐的网站,写一段紧张刺激的代码(附源码)

【Python爬虫】尺度太大了!爬一个专门看小姐姐的网站,写一段紧张刺激的代码(附源码)

简单的通用爬虫代码

import requests
import parsel
import re
import os

page_html = requests.get('https://www.kanxiaojiejie.com/page/1').text
pages = parsel.SELEctor(page_html).css('.last::attr(href)').get().split('/')[-1]
for page in range(1, int(pages) + 1):
    print(f'==================正在爬取第{pagE}页==================')
    response = requests.get(f'https://www.kanxiaojiejie.com/page/{pagE}')
    data_html = response.text
    # 提取详情页
    zip_data = re.findall('<a href="(.*?)" target="_blank"rel="bookmark">(.*?)</a>', data_html)
    for url, title in zip_data:
        print(f'----------------正在爬取{titlE}----------------')
        if not os.path.exists('img/' + titlE):
            os.mkdir('img/' + titlE)
        resp = requests.get(url)
        url_data = resp.text
        SELEctor = parsel.SELEctor(url_data)
        img_list = SELEctor.css('p>img::attr(srC)').getall()

        for img in img_list:
            img_data = requests.get(img).content
            img_name = img.split('/')[-1]
            with open(f"img/{titlE}/{img_namE}", mode='wb') as f:
                f.write(img_data)
            print(img_name, '爬取成功!!!')
        print(title,'爬取成功!!!')

 

@H_197_266@

【Python爬虫】尺度太大了!爬一个专门看小姐姐的网站,写一段紧张刺激的代码(附源码)

升级 多线程版本

把每一块都封装一个函数, 每个函数都有它特定的功能

先导入模块

import requests # 第三方模块 pip install requests
import re # 正则表达式模块 内置模块
import time
import concurrent.futures
import os
import parsel

 

发送请求

def get_response(html_url):
    headers = {
        'User-Agent': '@H_849_100@mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36'
    }
    # 为什么这里要 requests.get()  post() 请求会更安全...
    response = requests.get(url=html_url, headers=headers)
    return response

 

保存数据

def save(title, img_url):
    img_data = requests.get(img_url).content
    img_name = img_url.split('/')[-1]
    with open("img\\" + title + '\\' + img_name, mode='wb') as f:
        f.write(img_data)

 

解析数据 获取图片url地址以及标题

def parse_1(data_html):
    zip_data = re.findall('<a href="(.*?)" target="_blank"rel="bookmark">(.*?)</a>', data_html, re.S)
    return zip_data

 

解析数据 获取图片url地址以及标题

def parse_2(html_data):
    SELEctor = parsel.SELEctor(html_data)
    img_list = SELEctor.css('p>img::attr(srC)').getall()
    return img_list

 

创建文件夹

def mkdir_img(titlE):
    if not os.path.exists('img\\' + titlE):
        os.mkdir('img\\' + titlE)

 

主函数

def main(html_url):
    html_data = requests.get(html_url).text
    zip_data = parse_1(html_data)
    for url, title in zip_data:
        mkdir_img(titlE)
        html_data_2 = get_response(url).text
        img_list = parse_2(html_data_2)
        for img in img_list:
            save(title, img)
        print(title, '爬取成功!!!')

 

程序的入口

if __name__ == '__main__':
    time_1 = time.time()
    exe = concurrent.futures.ThreadPoolExecutor(max_workers=10)
    for page in range(1, 11):
        url = f'https://www.kanxiaojiejie.com/page/{pagE}'
        exe.submit(main, url)
    exe.shutdown()
    time_2 = time.time()
    use_time = int(time_2) - int(time_1)
    print(f'总计耗时:{use_timE}')

 

【Python爬虫】尺度太大了!爬一个专门看小姐姐的网站,写一段紧张刺激的代码(附源码)

总耗时:80秒

大佬总结

以上是大佬教程为你收集整理的【Python爬虫】尺度太大了!爬一个专门看小姐姐的网站,写一段紧张刺激的代码(附源码)全部内容,希望文章能够帮你解决【Python爬虫】尺度太大了!爬一个专门看小姐姐的网站,写一段紧张刺激的代码(附源码)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: