爬虫练习案例2

本文详细介绍了如何使用Python和lxml库抓取站长素材网站的图片,包括定制请求、网页解析、XPath选择器以及图片下载过程。作者展示了从指定页码开始到结束下载所有图片的方法,并提供了XPath的基本语法示例。
摘要由CSDN通过智能技术生成

爬虫练习案例2

爬取站长素材的图片素材(https://sc.chinaz.com/)

使用语言: python
使用库: [如果在你的 IDE 有红色波浪线表示还没下载这个库]
  • urllib.request
  • lxml 内的 etree - 网页解析

pycharm下载 lxml

文件 > 设置 > 项目:xxx > python解释器 > “”(alt+Ins) > 搜索lxml > 安装软件包

爬取思路:

获取数据(xpath)

和上一次练习的步骤一致

  1. 请求对象定制 (request)
  2. 模拟浏览器访问页面 (response)
  3. 获取内容 (content)
下载图片到本地(urlretrieve)
# coding=utf-8

import urllib.request
from lxml import etree

def create_request(page):
    if page == 1:
        url = 'https://sc.chinaz.com/tupian/chouxiangtupian.html'
    else:
        url = 'https://sc.chinaz.com/tupian/chouxiangtupian_' + str(page) + '.html'

    headers = {
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36",
    }

    request = urllib.request.Request(url=url, headers=headers)
    return request

def get_content(request):
    response = urllib.request.urlopen(request)
    content = response.read().decode('utf-8')
    return content

# 下载图片
def down_load(content):
    # urllib.request.urlretrieve('图片名字', '文件的名字')
    tree = etree.HTML(content)
    # //div//img/@data-original
    # //div//img/@alt
    name_list = tree.xpath('//div//img/@alt')
    src_list = tree.xpath('//div//img/@data-original')
    # print(len(name_list), len(src_list))
    for i in range(len(name_list)):
        name = name_list[i]
        src = src_list[i]
        url = 'https:' + src
        urllib.request.urlretrieve(url=url, filename='./chouxiangimg/'+ name+'.jpg')


if __name__ == '__main__':
    start_page = int(input("请输入起始页码:"))
    end_page = int(input("请输入结束页码:"))

    for page in range(start_page, end_page+1):
        # 请求对象定制
        request = create_request(page)
        content = get_content(request)
        down_load(content)

执行结果

会在当前目录下已有的chouxiangimg文件夹内下载网站[起始页面]-[结束页面]的所有图片

拓展知识

解析本地文件 - etree.parse('xx.html')
解析服务器文件 - etree.HTML(content)

xpath的基本语法(返回一个列表)

tree = etree.HTML(content)
list = tree.xpath(“↓语法↓”)

// : 查找所有子孙节点, 不考虑层级关系
/ : 查找所有的直接子节点
//div[@id] : 查找所有有id的节点
//div[@id="id"] : 查找所有id为"id"的节点
//div[contains(@id, "he")] : 模糊查询,查询所有id有"he"字的节点
//div[starts-with(@id, "he")] : 顾名思义
//div[@id="id" and id="id2"] : 查询所有id为"id"和所有

/text() : 获取选择器当中的内容
/@<css属性名> : 获取选择器对应的css属性值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值