爬虫_解析_xpath

1.xpath插件安装

(1) 打开chrome浏览器

(2)点击右上角小圆点

(3)更多工具

(4)扩展程序

(5)拖拽xpath插件到扩展程序中

(6)如果crx文件失效,需要将后缀修改为zip

(7)再次拖拽

(8)关闭浏览器重新打开

(9)Ctrl + shift + x

(10)出现小黑框

 

2.xpath基本使用

2.1 安装 lxml

找到项目所在目录的scripts,在这个路径下执行命令“pip install lxml -i https://pypi.douban.com/simple

 

 2.2 导入lxml.etree

导入命令:from lxml import etree

2.3 解析

解析本地文件

etree.parse()

html_tree=etree.parse('xx.html')

解析服务器响应文件

etree.HTML()

html_tree = etree.HTML(response.read().decode('utf-8'))

xpath基本语法

复制代码
1.路径查询
    //:查找所有子孙节点,不考虑层级关系
    /:找直接子节点
2.谓词查询
    //div[@id]
    //div[@id="maincontent"]
3.属性查询
    //@class
    //div[@class=""]
4.模糊查询
    //div[contains(@id,"he")]
5.内容查询
  //div/h1/text()
6.逻辑运算
  //div[@id="head" and @class="s_down"]
  //title | //price
复制代码

 

复制代码
#(1)获取网页源码
#(2)解析服务器响应的文件 etree.HTML()
#(3)打印

import urllib.request
url = 'https://www.baidu.com/'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36'
}
#请求对象的定制
request = urllib.request.Request(url=url,headers=headers)
#模拟浏览器访问服务器
response = urllib.request.urlopen(request)
#获取网页源码
content = response.read().decode('utf-8')
# print(content)

#解析网页源码来获取我们想要的数据
from lxml import etree
#解析服务器响应的文件
tree = etree.HTML(content)
#获取想要的数据 xpath的返回值值一个列表类型的数据
result_list = tree.xpath('//input[@id="su"]/@value')
result = result_list[0]
print(result)
复制代码

利用安装的小黑框工具来调试xpath查找的内容

 

运行效果:
 
 
源代码:https://gitee.com/heating-cloud/python_spider.git

3.xpath下载图片

复制代码
# 编程思路
#(1)请求对象的定制
#(2)获取网页的源码
#(3)下载图片

#需求 下载前十页的图片
#https://sc.chinaz.com/tupian/qinglvtupian.html
#https://sc.chinaz.com/tupian/qinglvtupian_2.html
#https://sc.chinaz.com/tupian/qinglvtupian_3.html
import urllib.request
from lxml import etree


def create_request(page):
    if (page==1):
        url = 'https://sc.chinaz.com/tupian/qinglvtupian.html'
    else:
        url = 'https://sc.chinaz.com/tupian/qinglvtupian_'+str(page)+'.html'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 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):
    #将网页源码转换成etree对象
    tree = etree.HTML(content)
    name_list = tree.xpath('//div[@id="container"]//a/img/@alt')
    # 一般涉及图片的网站都会进行懒加载 加载之前的是src2
    src_list = tree.xpath('//div[@id="container"]//a/img/@src2')

    for i in range(len(name_list)):
        name = name_list[i]
        src = src_list[i]
        url = 'https:'+src
        print(name,url)
        #下载图片
        urllib.request.urlretrieve(url=url,filename='../loveImg/'+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)
复制代码

 

寻找src,在懒加载前是src2

 

 

运行效果:

 

 


posted @   创客未来  阅读(75)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2021-05-24 Golang 错误处理
点击右上角即可分享
微信分享提示