python—爬虫爬取图片网页实例

Python爬取图片是一个常见的网络爬虫应用场景。这里,我将提供一个简单的示例,这段代码是一个Python脚本,用于从网站抓取图片并保存到本地文件夹中。它使用了几个Python库来完成任务,包括os.path(尽管在代码片段中直接导入的是os模块,但用于检查文件夹是否存在和创建文件夹),fake_useragent(用于生成随机的用户代理字符串以模拟不同的浏览器请求),requests(用于发送HTTP请求),以及lxml的etree(用于解析HTML内容)。
以下为爬虫爬取某网页的相关代码与详解。

1.导入必要的库:

import os:实际上,代码中使用了os模块而不是os.path,但通常os.path被用于路径操作。这里,os模块用于检查文件夹是否存在和创建文件夹。
import fake_useragent:是一个 Python 包,它用于生成随机的用户代理(User-Agent)字符串。用户代理字符串是一种在HTTP请求中发送给服务器,以标识发起请求的客户端(如浏览器)的类型、版本、操作系统等信息的字符串。
import requests:用于发送HTTP请求。这是Python中非常流行的HTTP客户端库,简单易用。
from lxml import etree:用于解析HTML和XML文档。它提供了强大的XPath和XSLT功能,使得从HTML文档中提取信息变得容易。
(注意:如有相关库未安装,可通过pip install操作来进行安装,例如安装requests库,我们可以pip install requests,直接进行安装就可以了。)

import os.path

import fake_useragent
import requests
from lxml import etree

2.设置请求头:

通过 fake_useragent.UserAgent().random 生成一个随机的用户代理字符串,并将其设置为请求头的 User-Agent。这有助于伪装爬虫的身份,减少被网站封禁的风险。

# UA伪装
head = {
    "User-Agent": fake_useragent.UserAgent().random
}

3.定义全局变量:

pic_name = 0:用于生成图片文件的名称。这里我们从0开始生成,每添加一张照片名称往上加1.

pic_name = 0

4.定义request_pic函数:

这个函数接受一个URL作为参数,用于抓取该URL指向的页面上的图片。
使用requests.get发送请求,并将响应内容赋值给res_text。
使用etree.HTML解析HTML内容,并存储在tree变量中。
通过XPath表达式查找页面上的图片链接(假设它们位于

下的
  • 中的
  • 元素内)。
    遍历找到的
  • 元素,提取每个图片链接,并发送另一个请求来获取图片内容。
    将图片内容写入到本地文件中,文件名由pic_name变量生成,并递增pic_name以生成不同的文件名。

def request_pic(url):
    # 2.发送请求
    response = requests.get(url, headers=head)
    # 3.获取需要的数据
    res_text = response.text
    # 4.数据解析
    tree = etree.HTML(res_text)
    # print(res_text)
    li_list = tree.xpath("//div[@class='slist']/ul/li")
    print(li_list)

    for li in li_list:
        # 1.url
        img_url = "https://pic.netbian.com"+"".join(li.xpath(".//a/img/@src"))
        print(img_url)
        # 2.发送请求
        img_response = requests.get(img_url, headers=head)
        # 3.获取需要的数据
        img_content = img_response.content
        global pic_name
        with open(f"pictures/{pic_name}.jpg", "wb") as fp:
            fp.write(img_content)
        pic_name += 1

5.主程序:

检查是否存在名为pictures的文件夹,如果不存在则创建它。
定义一个起始URL,并循环遍历多个分页URL(从index_2.html到index_9.html)。对每个分页URL调用request_pic函数来抓取图片。

if __name__ == '__main__':
    if not os.path.exists("pictures"):
        os.mkdir("pictures")
    # 1.url
    url = f"https://pic.netbian.com/4kdongman/"
    # request_pic(url)
    for i in range(2,10):
        next_url = f"https://pic.netbian.com/4kdongman/index_{i}.html"
        request_pic(next_url)

    pass

你可能感兴趣的:(python,爬虫,开发语言)