首页 > 其他分享 >彼岸网壁纸抓取

彼岸网壁纸抓取

时间:2024-08-11 13:49:34浏览次数:11  
标签:img get url tree 抓取 彼岸 urls path 壁纸

彼岸网壁纸抓取

创建时间:2024-08-11

一、代码

1.1 代码

import os
import random
import time

import requests
from lxml import etree


url = 'http://pic.netbian.com/'
header = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0'
}


def get_html(url):
    response = requests.get(url, headers=header)
    response.encoding = response.apparent_encoding
    # print(response.text)
    tree = etree.HTML(response.text)
    return tree


tree = get_html(url)
tp_urls = tree.xpath('//ul[@class="clearfix"]/li/a/@href')
titles = tree.xpath('//ul[@class="clearfix"]/li/a/@title')
for tp, title in zip(tp_urls, titles):
    # 拼凑完整的url
    img_url = 'http://pic.netbian.com' + tp
    tree = get_html(img_url)
    img_ = tree.xpath('//a[@id="img"]/img/@src')[0]
    img_urls = 'http://pic.netbian.com' + img_
    print(img_urls)
    # exit()
    path = os.path.join('./彼岸img', title.replace(" ", "_").replace("*", "") + '.jpg')

    with open(path, 'wb') as f:
        f.write(requests.get(img_urls).content)
        print(title)
    time.sleep(random.randint(1, 3))

1.2 代码

"""
地址:http://www.netbian.com/

"""
import os

#  导入 requests 和 etree 模块
import requests
from lxml import etree

classify = "meinv"
start_page = 1
end_page = 6


# 确保 "wallpaper" 文件夹存在,
folder_path = f"./wallpaper/{classify}"
if not os.path.exists(folder_path):
    os.makedirs(folder_path)


#  循环下载n页的图片
for i in range(start_page-1, end_page):
    url = f"http://www.netbian.com/{classify}/"  # 网站上分类的url地址
    #  第一页的地址和后面页的地址不同,需要分别处理
    if i == 0:
        url = url + "index.htm"
        i += 1
    else:
        url = url + "index_" + str(i + 1) + ".htm"

    #  设置协议头
    headesp = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.35'}

    #  发送get请求并获取响应且设置编码
    resp = requests.get(url, headers=headesp)
    resp.encoding = resp.apparent_encoding

    #  将响应内容解析为etree对象
    xp = etree.HTML(resp.text)

    #  获取每页中的图片详情页链接
    img_url = xp.xpath("/html/body/div[@class='wrap clearfix']/div[@id='main']/div[@class='list']/ul/li/a/@href")
    print(img_url)
    for n in img_url:
        #  根据图片详情页链接再次发送get请求并获取图片地址和名称
        resp = requests.get('http://www.netbian.com' + n)
        resp.encoding = resp.apparent_encoding
        xp = etree.HTML(resp.text)
        img_urls = xp.xpath('//div[@class="pic"]/p/a/img/@src')
        img_name = xp.xpath('//div[@class="pic"]/p/a/img/@alt')

        # 下载并保存到目标文件夹
        for u, n in zip(img_urls, img_name):
            print(f'图片名:{n} 地址:{u}')
            img_resp = requests.get(u)
            with open(f'./{folder_path}/{n}.jpg', 'wb') as f:
                f.write(img_resp.content)

1.3 效果1

1.4 效果2

二、代码学习

2.1 设置了请求的头部信息,模拟浏览器访问。

url = 'http://pic.netbian.com/'
header = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0'
}

2.2 定义了一个 get_html 函数

用于获取网页的 HTML 内容,并处理编码问题,同时使用 lxmletree 模块将其转换为可解析的树结构。

def get_html(url):
    response = requests.get(url, headers=header)
    response.encoding = response.apparent_encoding
    # print(response.text)
    tree = etree.HTML(response.text)
    return tree

2.3 通过访问首页获取图片的链接和标题信息。

tree = get_html(url)
tp_urls = tree.xpath('//ul[@class="clearfix"]/li/a/@href')
titles = tree.xpath('//ul[@class="clearfix"]/li/a/@title')

2.4 处理获取到的每个图片详情页链接

再次请求获取真实的图片链接,并将图片保存到本地指定的路径。

for tp, title in zip(tp_urls, titles):
    # 拼凑完整的url
    img_url = 'http://pic.netbian.com' + tp
    tree = get_html(img_url)
    img_ = tree.xpath('//a[@id="img"]/img/@src')[0]
    img_urls = 'http://pic.netbian.com' + img_
    print(img_urls)
    # exit()
    path = os.path.join('./彼岸img', title.replace(" ", "_").replace("*", "") + '.jpg')

    with open(path, 'wb') as f:
        f.write(requests.get(img_urls).content)
        print(title)
    time.sleep(random.randint(1, 3))'
    # 在保存图片的过程中,为了避免频繁请求对服务器造成过大压力,我们设置了随机的等待时间。

2.5 优化代码

  1. 定义了图片分类 classify 以及起始页 start_page 和结束页 end_page 的变量,用于控制爬取的范围。
  2. 增加了根据分类创建文件夹的代码,以确保图片保存到特定分类的文件夹中。
  3. 针对不同页码构建了不同的 URL 格式,以处理第一页和后续页的 URL 差异。

三、每日一学

在爬取图片时如何避免被封禁?

  1. 控制访问频率:不要过于频繁地发送请求。就像前面代码中使用 time.sleep(random.randint(1, 3)) 来随机暂停 1 到 3 秒,这样可以模拟人类的正常访问行为。
    例如,如果您在短时间内发送大量请求,网站可能会认为这是恶意攻击而封禁您的 IP 。
  2. 设置合理的请求头:确保 User-Agent 等请求头字段看起来像是正常的浏览器发送的请求。
    比如,不同的浏览器和操作系统有不同的 User-Agent 特征。使用常见的浏览器 User-Agent 可以降低被识别为爬虫的风险。
  3. 使用代理 IP:如果您的访问频率较高,可以使用代理 IP 来切换访问的来源,避免单个 IP 被封禁。
    但要注意使用合法可靠的代理服务。
  4. 逐步增加访问量:不要一开始就进行大量的请求,而是逐渐增加请求的数量和频率。
    比如,先从少量的请求开始,观察网站的反应,然后再适当增加。

标签:img,get,url,tree,抓取,彼岸,urls,path,壁纸
From: https://www.cnblogs.com/suifeng2000/p/18353288

相关文章

  • Python网络爬虫抓取动态网页并将数据存入数据库MySQL
    简述以下的代码是使用python实现的网络爬虫,抓取动态网页http://hb.qq.com/baoliao/。此网页中的最新、精华下面的内容是由JavaScript动态生成的。审查网页元素与网页源码是不同。以上是网页源码以上是审查网页元素所以此处不能简单的使用正则表达式来获取内容。......
  • 程序员壁纸合集分享,最后一张有惊喜
    大家好,我是程序员鱼皮,今天轻松一下,给大家分享一些程序员有关的壁纸,看到最后一张有惊喜哦~ 经典壁纸神图镇楼:希望这张壁纸不要成真:这是程序员每天的生活么?有多少人能看懂这张图的意思?01是程序员的浪漫,就是有点密恐。。一人、一桌、一电脑而已:Linux之父经典名言:P......
  • 如何使用 beautifulsoup4 选择部分 HTML 标签进行网页抓取
    这是我试图从中抓取数据的网站的链接:https://www.fotmob.com/leagues/47/stats/season/20720/players/goals/premier-league我想使用beautifulsoup4选择class='css-653rx1-StatsContainereozqs6r5'的部分。在您提到find()和find_all()之前,我已经使用了两......
  • Crash 的旅行计划 / 蓝色彼岸花 题解
    前言题目链接:Hydro&bzoj。题意简述一棵\(n\)个结点的树上,每个点有点权,有\(m\)次操作:修改\(u\)的点权;查询以\(u\)为一端的简单路径的点权和最大值。对于\(20\%\)的数据:\(n,m\leq10^3\);对于另\(30\%\)的数据:第\(i\)条边连接\(i\)和\(i+1\);对于......
  • macOS Sequoia Beta 隐藏款新壁纸
    苹果发布了macOSSequoiaBeta5,有一些Mac用户安装后发现了一款新的森林主题壁纸。但是,该壁纸还未正式发布,而且还隐藏在系统文件中。新壁纸:Sequoia-Sunrise1920×1080266KB隐藏文件夹位置以及新壁纸的.heic和.mov格式 (动态模式)下载链接「包含标准的macOSS......
  • 如何使用新版本抓取foursquare?
    我正在尝试使用此代码从foursquare中抓取场地defgetNearbyVenues(names,latitudes,longitudes,radius=500):venues_list=[]forname,lat,lnginzip(names,latitudes,longitudes):print(name)#CreatetheAPIreques......
  • 使用Python 和 Selenium 抓取 酷狗 音乐专辑 附源码
    在这篇博客中,我将分享如何使用Python和Selenium抓取酷狗音乐网站上的歌曲信息。我们将使用BeautifulSoup解析HTML内容,并提取歌曲和专辑信息。依赖库requestsbeautifulsoup4selenium准备工作首先,我们需要安装一些必要的库:pipinstallrequestsbeautifulsoup4selenium......
  • 无法从谷歌浏览器中抓取链接
    我的代码正在打开选项卡,搜索主题并关闭,但它没有向我发送它应该收集的链接。fromseleniumimportwebdriverpesquisa=input("oquevocêquerpesquisar:")defget_results(search_term):url="https://www.startpage.com"driver=webdriver.Chrome()......
  • 模拟登录以在登录墙后进行数据抓取的最简单方法
    我正在尝试从雅虎财经抓取数据。我需要的数据只能通过我购买的高级订阅来访问。但是,每当我运行脚本来抓取网页时,它都是在我的登录之外完成的。因此我的脚本返回-{"finance":{"result":nullerror:{"code":"unauthorized"description:"用户未登录"}}}我想模拟我的登录通过......
  • Python 网络抓取与请求和美丽的汤被需要 javascript 阻止
    我正在尝试从网站上抓取文本。我使用简单的代码:requests.get(url_here)。我的代码直到最近才有效。现在,当我使用请求时,我收到一条消息,而不是获取网站的文本:“该网站需要启用JavaScript!您使用的浏览器不支持JavaScript,或者已关闭JavaScript。“我已验证我的浏览器确实......