三、爬虫数据分析-Xpath

1.环境安装:

 -pip install lxml

2.如何实例化一个etree对象:

from lxml import etree
(1)将本地的html文档中的源码数据加载到etree对象中:
  etree.parse(filePath)
(2)可以将从互联网上获取的源码数据加载到etree对象中:

   etree.HTML("page_text")

3.xpath('xpath表达式')

(1)/:表示的是从根节点开始定位,表示的是一个层级。
(2)//:表示的是多个层级,可以表示任意位置开始定位
(3)属性定位://div[@class='song'] tag[@attrName="attrValue"]
  (4)索引定位://div[@class='song']/p[3] --索引是从1开始的
(5)取文本:
    -/text()获取的是标签中的直系的文本内容
   - //text()标签中非直系的文本内容(所有的文本内容)
 (6)取属性(取出src中的属性值)
        img/@src
import requests
from lxml import etree
import os

if __name__ == "__main__":
    url = "https://pic.netbian.com/4kmeinv/"
    headers = {
        "User-Agent":'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
    }
    response = requests.get(url = url,headers= headers)
    #手动设置数据的编码格式
    # response.encoding = "utf-8"
    page_text = response.text
    tree = etree.HTML(page_text)
    #数据解析:src的数据,以及alt名称
    li_list = tree.xpath('//div[@class= "slist"]/ul/li')
    # fp = open()
    if not os.path.exists('./piclibs'):
        os.mkdir('./piclibs')
    for li in li_list:
        img_src = 'https://pic.netbian.com' +li.xpath("./a/img/@src")[0]
        img_name = li.xpath("./a/img/@alt")[0] + ".jpg"
        # print(img_name,"1")
        #通用的处理中文乱码的解决方案
        img_name = img_name.encode("iso-8859-1").decode('gbk')
        print(img_name)
        img_data = requests.get(url= img_src,headers=headers).content# 取出二进制数据"
        img_path = "piclibs/" + img_name
        with open(img_path,"wb")as fp:
            fp.write(img_data)
            print(img_name+"下载成功")

 

posted @ 2022-08-14 10:16  机械猿  阅读(58)  评论(0)    收藏  举报