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

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日

相关文章

  • Python爬虫lxml解析实战

    XPath常用规则 / 从当前节点选取直接子节点 // 从当前节点选取子孙节点 . 选取当前节点 .. 选取当前节点的父节点 @ 选取属性 * 通配符,选择所有元素节点与元素名 @* 选取所有属性 [@attrib] 选取具有给定属性的所有元素 [@attrib=’value’] 选取给定属性具有给定值的所有元素 [tag] 选取所有具有指定元素的直接子节点…

    爬虫 2023年4月11日
    00
  • 通过淘宝数据爬虫学习python scrapy requests与response对象

    下面是关于“通过淘宝数据爬虫学习python scrapy requests与response对象”的完整攻略: 1. 爬虫环境的搭建 首先,我们需要搭建Python爬虫环境。本攻略推荐使用Python 3.7版本及以上的版本进行搭建。同时,建议使用虚拟环境进行Python的配置,以免与当前环境产生冲突。使用以下命令创建一个名为spider_env的虚拟环境…

    python 2023年5月14日
    00
  • 详解Python 一窥字节码的究竟

    Python字节码是Python源代码的中间表示形式,可以在解释器中执行,Python解释器可以将Python源码转化成字节码,然后在运行时再将字节码转化成机器码执行。使用Python字节码可以得到更好的性能,尤其是在执行过程中,可以减少解释器的开销。 下面讲解Python字节码使用方法的完整攻略: 1. 生成字节码 使用Python自带的compile函数…

    python-answer 2023年3月25日
    00
  • 浅谈Python中的zip()与*zip()函数详解

    浅谈Python中的zip()与*zip()函数详解 简介 zip() 和 *zip() 函数是 Python 中常用的内置函数,它们能够帮助我们处理多个序列(例如列表、元组等)数据,将它们以每个序列的相同索引处的元素为基准,打包成一个元组,并返回由这些元组组成的新的序列。这两个函数的使用方法和效果类似,但是在参数的传递方式上存在区别。 zip() 函数 z…

    python 2023年5月14日
    00
  • 详解Python中openpyxl模块基本用法

    当然,这里就为大家介绍一下”详解Python中openpyxl模块基本用法”的实例教程,希望对大家有所帮助。 1. openpyxl模块介绍 openpyxl是一个Python库,用于处理Excel文档。这个库允许您读取和写入Excel xlsx/xlsm/xltx/xltm文件,而且还支持公式、图表和一些其他高级特性。 2. 安装openpyxl模块 在命…

    python 2023年5月13日
    00
  • Python压缩包处理模块zipfile和py7zr操作代码

    接下来我会详细讲解Python压缩包处理模块zipfile和py7zr的使用方法。 模块介绍 zipfile是Python的标准库之一,是Python自带的压缩包处理模块,可以对Zip、Gzip、Tar等格式的压缩文件进行压缩、解压缩、添加、删除等操作。 py7zr是一个第三方库,可以实现7z格式的压缩解压缩。 zipfile使用方法 下面是zipfile的…

    python 2023年6月3日
    00
  • python机器学习理论与实战(六)支持向量机

    Python机器学习理论与实战(六)支持向量机 简介 支持向量机(Support Vector Machine,简称 SVM)是一个强大的分类算法,其具有优秀的泛化能力。在本文中,我们将介绍 SVM 的原理、实现及应用。 SVM 原理 SVM 的核心思想是:找到一个可以将不同类别的数据分割开的最优超平面。其中“最优”的定义是:在所有能成功分割不同类别数据的超…

    python 2023年5月23日
    00
  • Python最长公共子串算法实例

    下面是详细讲解“Python最长公共子串算法实例”的完整攻略,包括算法原理、Python实现和两个示例说明。 算法原理 最长公共子串算法是一种用于查找两个字符串中最长公共子串的算法。其主要思想是将两个字符串分别以行和列的形式,然后查找它们的交叉点,找到最长的交叉点序列,即为最长公共子串。最长公共子串算法的实现过程如下: 构建一个二维数组,用于存储两个字符串中…

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