python根据用户需求输入想爬取的内容及页数爬取图片方法详解

yizhihongxing

Python根据用户需求输入想爬取的内容及页数爬取图片方法详解

在Python中,使用第三方库Requests和BeautifulSoup可以很方便地完成对网站的爬取操作。本攻略将介绍如何根据用户需求输入想爬取的内容及页数爬取图片。

1. 安装相关库

首先,需要安装两个库:Requests和BeautifulSoup。可以使用pip命令进行安装:

pip install requests
pip install beautifulsoup4

2. 进行网站爬取

接下来,需要使用Requests库进行网站爬取操作。我们可以使用输入框让用户输入所需爬取的内容以及要爬取的页数,然后将其传递给Requests库的get()方法进行网站爬取操作。

我们以百度图片搜索为例,假设用户想要搜索名称为“cat”的图片,共爬取3页。相应的代码如下:

import requests
from bs4 import BeautifulSoup

# 输入搜索内容和爬取页数
word = input('请输入要搜索的图片名称:')
page_num = int(input('请输入要爬取的页数:'))

# 处理搜索内容,将空格替换为“+”
word = word.replace(' ', '+')

# 循环爬取指定页数的图片
for i in range(page_num):
    # 构造URL
    url = 'https://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=' + word + '&pn=' + str(i * 20)

    # 发送请求
    response = requests.get(url)

    # 解析HTML
    soup = BeautifulSoup(response.content, 'html.parser')
    imgs = soup.find_all('img', class_='main_img')

    # 下载图片
    for img in imgs:
        img_url = img['src']
        img_name = img_url.split('/')[-1]
        with open(img_name, 'wb') as f:
            f.write(requests.get(img_url).content)

在上述代码中,我们首先使用Input()方法让用户输入要搜索的图片名字以及要爬取的页数。然后,使用replace()方法将空格替换为“+”,构造出百度图片搜索的URL,其中“pn”参数代表的是从第几张图片开始爬取。

接下来,我们使用Requests库的get()方法发送网络请求,并使用BeautifulSoup库解析HTML。在解析完HTML后,我们可以使用find_all()方法获取到所有的图片元素,在循环遍历每个元素的时候,将图片下载到本地。

3. 示例说明

下面是两个使用该方法实现的实际示例。

示例一:爬取豆瓣书籍图片

假设我们想要爬取豆瓣上所有评价数超过1000的书籍封面图片,共爬取20页。相应的代码如下:

import requests
from bs4 import BeautifulSoup

# 输入搜索内容和爬取页数
url = 'https://book.douban.com/tag/?view=type&icn=index-sorttags-all'
page_num = 20

# 循环爬取指定页数的图片
for i in range(page_num):
    # 构造URL
    url = url + '&start=' + str(i * 20)

    # 发送请求
    response = requests.get(url)

    # 解析HTML
    soup = BeautifulSoup(response.content, 'html.parser')
    items = soup.find_all('li', class_='subject-item')

    # 下载图片
    for item in items:
        rating_num = item.find('span', class_='rating_nums')
        if rating_num and float(rating_num.get_text()) >= 8.5:
            img = item.find('img')
            img_url = img['src']
            img_name = img_url.split('/')[-1]
            with open(img_name, 'wb') as f:
                f.write(requests.get(img_url).content)

在上述代码中,我们使用requests库访问豆瓣读书首页,并根据“评价数超过1000”以及“评分大于8.5”的条件爬取书籍封面图片。在每次循环中,我们需要更新URL的参数,然后重新请求HTML页面进行解析。

示例二:爬取美女写真图片

假设我们想要爬取某个美女写真网站上的所有图片,共爬取10页。相应的代码如下:

import requests
from bs4 import BeautifulSoup

# 输入搜索内容和爬取页数
url = 'https://www.meituri.com/x/21/'
page_num = 10

# 循环爬取指定页数的图片
for i in range(1, page_num+1):
    # 构造URL
    if i == 1:
        url = url
    else:
        url = url + 'index_' + str(i) + '.html'

    # 发送请求
    response = requests.get(url)

    # 解析HTML
    soup = BeautifulSoup(response.content, 'html.parser')
    items = soup.find_all('div', class_='image-item')

    # 下载图片
    for item in items:
        img_url = item.find('a')['href']
        img_name = img_url.split('/')[-1]
        with open(img_name, 'wb') as f:
            f.write(requests.get(img_url).content)

在上述代码中,我们使用requests库访问某个美女写真网站,并抓取所有的图片。在每次循环中,我们需要更新URL的参数,以便获取到所有的页面上的图片元素。然后,我们可以使用find()方法获取到图片的连接,然后将其下载下来。

以上就是本攻略的全部内容。在进行网站爬取时,需要注意到一些法律法规的限制,比如不能爬取侵犯版权的内容。一定要遵守相关法律法规。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python根据用户需求输入想爬取的内容及页数爬取图片方法详解 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • 对python3标准库httpclient的使用详解

    对python3标准库http.client的使用详解 在Python中,http.client模块提供了一个简便的方法来进行HTTP请求和解析HTTP响应。http.client库允许发送HTTP请求,处理HTTP响应以及创建自定义的HTTP客户端。 发送HTTP请求 1. 发送GET请求 我们可以使用http.client中的HTTPConnection…

    python 2023年6月3日
    00
  • 使用Django和Python创建Json response的方法

    使用Django和Python创建JSON response的方法可以通过以下步骤实现: 步骤1: 引入json模块和HttpResponse模块 我们需要引入json模块来处理JSON数据,同时引入HttpResponse模块来将JSON数据作为HTTP响应返回给客户端。 import json from django.http import HttpRe…

    python 2023年6月3日
    00
  • tensorflow使用L2 regularization正则化修正overfitting过拟合方式

    以下是“TensorFlow使用L2正则化修正过拟合”的完整攻略: 一、问题描述 在深度学习中,过拟合是一个常见的问题。为了解决这个问题,我们可以使用正则化技术来限制模型的复杂度。本文将详细讲解如何使用L2正则化修正过拟合,并提供两个示例说明。 二、解决方案 2.1 L2正则化 L2正则化是一种常见的正则化技术,它通过向损失函数中添加权重的平方和来限制模型的…

    python 2023年5月14日
    00
  • python requests.post带head和body的实例

    以下是关于Python requests.post带head和body的实例的攻略: Python requests.post带head和body的实例 在使用Python requests.post发送请求时,可以带有head和body参数。以下是Python requests.post带head和body的实例的攻略。 发送带有head和body的POS…

    python 2023年5月15日
    00
  • Python Requests模拟登录实现图书馆座位自动预约

    在本文中,我们将介绍如何使用Python的Requests库模拟登录实现图书馆座位自动预约。我们将使用Requests库发送HTTP请求,并使用Beautiful Soup库解析HTML文档,以实现自动预约座位的功能。 1. 登录 首先,我们需要模拟登录图书馆系统。我们可以使用Requests库发送POST请求,将用户名和密码作为表单数据提交。以下是一个示例…

    python 2023年5月15日
    00
  • python中for循环输出列表索引与对应的值方法

    在Python中,我们可以使用for循环来遍历列表,并输出列表中每个元素的索引和对应的值。本文将详细讲解两种常见的方法,包括使用enumerate函数和range。 方法一:使用enumerate函数 使用enumerate函数是一种简单的方法,可以同时获取列表中每个元素的索引和对应的值。下面是一个简单的示例: # 示例1:使用enumerate函数输出列表…

    python 2023年5月13日
    00
  • python中setuptools的作用是什么

    Python中的setuptools是一种用于管理Python软件项目的工具包。它包括命令行工具和Python库,并提供了一个统一的接口来发现、安装、构建和发布Python模块和包。 setuptools的主要作用包括: 管理Python依赖项。 setuptools允许您指定项目所依赖的Python软件包及其版本信息,以便在安装Python软件包时确保所有…

    python 2023年6月3日
    00
  • Python利用Pydub实现自动分割音频

    下面我就详细讲解一下“Python利用Pydub实现自动分割音频”的完整攻略。 背景介绍 在音频处理的过程中,有时需要对一段长音频进行分割,提取其中的小片段。手动进行这样的操作比较繁琐,而使用Python和Pydub库可以轻松实现自动分割音频。 实现步骤 1. 安装所需库 首先需要安装所需的库,包括Pydub和ffmpeg。Pydub是一种Python音频处…

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部