python爬虫爬取妹子图

news/2024/7/19 11:27:08 标签: 爬虫

爬取网页

    req = urllib.request.Request(url)
    req.add_header('user-agent',
                   'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36')
    response = urllib.request.urlopen(req)
    html = response.read()
res = requests.get(img_url, headers = headers)
resp.text          //  返回的是一个经过解码后的字符串,是unicode类型
resp.content    // 返回的是一个原生字符串,是bytes类型

解析网页

soup = BeautifulSoup(html, 'html.parser')
    imgs = soup.select('.slist')[0]
    imgs1 = imgs.find_all('img')
    imgs2 = imgs.find_all('a')
    imag_urls = []
    imag_titles = []
    for img in imgs1:
        imag_titles.append(img.get("alt"))
    for img in imgs2:
        imag_urls.append( s_url + img.get('href'))
    return  imag_titles, imag_urls

打印一下 soup 对象的内容,格式化输出

print soup.prettify()
 imgs = soup.select('.slist')[0]#获取class slist
 imgs1 = imgs.find_all('img')#获取标签 img
 imag_titles.append(img.get("alt"))#获取属性alt

下载文件

 path = './out/qc_picture/'
    if not os.path.exists(path):
        os.makedirs(path)
    res = requests.get(img_url, headers = headers)
    if res.status_code == 200:
        with open(path + name + str(page) + "页.jpg", "wb") as f:
            f.write(res.content)
    print(name + "-----下载完成")

注意事项

socket.setdefaulttimeout(1) #下载超过1s就跳过
res.close() #关闭请求
time.sleep(0.1)# 等待0.1s

实例

import urllib.request
import os
import requests
import time
import socket
from bs4 import BeautifulSoup
socket.setdefaulttimeout(1)
headers = {'Referer':'https://www.mzitu.com','User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3679.0 Safari/537.36'}#请求头,加上referer突破防盗链
url1 = "https://www.mzitu.com/xinggan"
url = "https://www.mzitu.com/mm"
def get_url(url):
    req = urllib.request.Request(url)
    req.add_header('user-agent',
                   'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36')
    response = urllib.request.urlopen(req)
    html = response.read()
    return html.decode("utf-8")#网站utf-8编码
def get_images(html):
    soup = BeautifulSoup(html, 'html.parser')
    imgs = soup.select('.postlist')[0]
    imgs1 = imgs.find_all('img')
    imgs2 = imgs.find_all('a')
    imag_urls = []
    imag_titles = []
    k = 0
    for img in imgs1:
        imag_titles.append(img.get("alt"))
    for img in imgs2:
        if k % 2:
            imag_urls.append(img.get("href"))
        k += 1
    return  imag_titles, imag_urls

def get_img(url):
    html2 = get_url(url)
    soup = BeautifulSoup(html2,"html.parser")
    soup = soup.select('.main-image')
    soup = soup[0].find_all("img")
    soup = soup[0].get("src")
    return soup

def save_imgs(img_url, page, name):
    path = './out/qc_picture/'
    if not os.path.exists(path):
        os.makedirs(path)
    res = requests.get(img_url, headers = headers)
    if res.status_code == 200:
        with open(path + name + str(page) + "页.jpg", "wb") as f:
            f.write(res.content)
    print(name + "-----下载完成")
    res.close()
    time.sleep(0.1)
def download(l, r):
    sum = 0
    for i in range(l-1, r):
        url_p = url + "/page/" + str(i + 1) + "/"
        html = get_url(url_p)
        list1, list2 = get_images(html)
        sum += len(list1)
        for j in range(len(list2)):
            url_img = get_img(list2[j] + "/1")
            save_imgs(url_img, i + 1, list1[j])
    print("一共下载" + str(sum) + "张图片")

download(5, 5)

http://www.niftyadmin.cn/n/864684.html

相关文章

说说 Google Guava 集合

Guava 工程是被 Google 的 Java 项目广泛依赖的核心库。 谷歌从日常的工作中提取出了很多高效率的 API 方法,从而诞生了 guava 工具包。 guava 的优点是: 高效设计良好的 API ;遵循高效的 java 语法实践;代码更简洁&#xff0c…

算法提高课第三章最小生成树及其扩展应用

任意一颗最小生成树可以包含权值最小的一条边生成树可以包含连接各个联通块的权值最小的边 无向图才可以使用最小生成树算法 1146. 新的开始 - AcWing题库 建立一个超级发电站&#xff08;虚拟源点&#xff09;&#xff0c;将点权转化为边权。 #include <iostream> #i…

算法提高课第三章拓扑排序

164. 可达性统计 - AcWing题库 求解拓扑序按照拓扑序求解状态&#xff08;状态定义为bitset<N>) AcWing 164. 可达性统计(2种简单写法) - AcWing #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <…

算法提高课第一章状态机模型

划定每一个状态 分析状态转移方程 1049. 大盗阿福 - AcWing题库 #include <iostream> #include <cstring> #include <algorithm>using namespace std; const int N 110000; int a[N]; int dp[N][2]; int n; int main() {int t;cin >> t;while(t --){…

SRv6网络编程阅读笔记

SRv6基本原理 概述 网络指令&#xff1a;SRv6 Segment&#xff08;SID&#xff09; LocatorFunctionArgumentsLocator是网络拓扑中分配给一个网络节点的标识&#xff0c;用于路由和转发报文到该节点。Locator标识位置信息&#xff0c;它有两个重要的属性&#xff1a;可路由和…

Acwing基础课刷题

第一讲 基础算法 快速排序88 (AcWing) (785). 快速排序 (AcWing) (786). 第(k)个数 归并排序 (AcWing) (787). 归并排序 (AcWing) (788). 逆序对的数量 二分 (AcWing) (789). 数的范围 (AcWing) (790). 数的三次方根 高精度 (AcWing) (791). 高精度加法 (AcWing) (…

力扣刷题指南

链表 计算表达式 二叉树 树的搜索 双指针 动态规划

LeetCode——计算表达式

224. 基本计算器 - 力扣&#xff08;LeetCode&#xff09; 【进阶补充】双栈解决通用「表达式计算」问题 class Solution { public:void replace(string &s){int pos s.find(" ");while(pos ! -1){s.replace(pos, 1, "");pos s.find(" "…