[分章:代码知识]python爬虫 xpath解析数据

本文介绍了如何使用Python的lxml库和XPath语法从网页中抓取数据,包括爬取指定HTML结构的内容并下载图片,同时处理了并发请求和文件管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实战4 xpath解析数据

代码思路

  1. 爬取网页数据str
  2. 将str实例化为extree对象:extree.HTML
  3. 通过extree.xpath和xpath语句实现提取指定文本。
  4. 保存文件

注意:xpath可以通过鼠标右键检查目标文本,而后右键复制xpath路径

前置环境

安装pip install xlml

完整代码

                        # 爬虫实战5,xpath解析数据

pass # 这是分隔符

# 1、导入库

import os

import requests

import time

from lxml import etree

t1 = time.thread_time()     # 测试开始时间



# 2、爬取数据

url = "https://pic.sogou.com/"



headers = {

    "user-agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36"

}



if os.path.exists("./img"):

    os.system(f'attrib -r "./img"')

    os.remove('./img')

os.mkdir("./img",mode=1)   # 创建图片存储路径

# 1.网页爬取

# page_Text = requests.get(url,headers=headers)

# with open('123.html','wb') as f:

#     f.write(page_Text.content)  # 保存html log

# tree = etree.HTML(page_Text.content) # 导入HTML数据



# 2.本地读取再转换

with open('123.html',mode='r',encoding='utf-8') as f:

    str1 = f.read()

tree = etree.HTML(str1) # 导入本地HTML文档



# 3.本地直接读取

# tree = etree.parse('123.html')



# 3、提取数据

# str = tree.xpath('/html/body/div')

# str = tree.xpath('//div[@class="index-left"]')   # 使用xpath表达式定位标签,返回为对象;'//'表示多个层级,可以从任意层级开始查找; '@class=""'为属性定位

# str = tree.xpath('//*[@id="content"]//a//text()')   # xpath索引是从1开始的;//text()是读取标签的text属性

str = tree.xpath('//*[@id="content"]/div[1]/div/div[1]/ul//img/@src')   # @src为读取标签的src的属性

print(str)

print(f"找到了{len(str)}个数据")  # @src为查找所有属性为src的标签



for i in str:

    i = 'https:' + i

    print(i)

    img_data = requests.get(url=i,headers=headers).content    # 在取得完整的image url后,获取图片数据



# 4、保存数据

    img_name = i.split('/')[-1]   # 获取image名称

    imgPath = 'img\\'+img_name+".png"   # image存储路径

    with open(imgPath,'wb') as f:

        f.write(img_data)

    time.sleep(0.05)   # 不要太频繁提取数据,否则会被认为是在攻击网站



print(f"use time : {0}",time.thread_time() - t1)    # 打印测试耗时

pass # 这是分隔符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值