第五周——爬虫入门 Day1 7.25

学习时间:9:00——11:00           16:00——18:00

Xpath解析:最常用且最便捷高效的一种解析方式。

Xpath解析原理:

  1. 实例化一个etree的对象,且需要将被解析的页面源码数据加载到该对象中。
  2. 调用etree对象中的xpath方法结合着xpath表达式实现标签的定位和内容的捕获。

lxml是一种解析器,在xpath爬取前安装。

如何实例化一个etree对象:

  1. 将本地的html文档中的源码数据加载到etree对象中。etree.parse(filePath)
  2. 可以将从互联网上获取的掩码数据加载到对象当中。etree.HTML('page_text')

xpath是根据层级关系去做的标签定位。从根节点(根目录:最外层标签的节点)逐步递归找到我们所要查找的内容。最终所返回的将是一个列表,列表当中存储的是我们所查找的节点,返回的并不是文档内容,而是一个Element对象当中进行的一个存储。而如果当我们所查找的标签为多个时,所返回的内容也是多个Element类型的对象,想要获取文本就在后面加上/text()

xpath表达式:

  • /:表示的是从根节点开始定位,表示的是一个层级。
  • //:表示的是多个层级,表示从任意位置开始定位。
  • 属性定位://div[@class=’song‘] 格式为:tag[@attrName='value']
  • 索引定位://div[@class='song']/p[3] 。索引是从1开始的。
  • 取文本
  • /text() 获取的是标签中直系的文本内容
  • //text()获取的是非直系的文本内容(所有文本内容)
  • 取属性:/@attrName:直接/@加上属性名称(eg:img/@src)

项目实践:58二手房房源信息

import requests

header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.41 Safari/537.36 Edg/101.0.1210.32'}
url = 'https://bj.58.com/ershoufang/'
page_text = requests.get(url,headers=header).text
tree = etree.HTML(page_text)
div_list = tree.xpath('//section[@class="list"]/div[@class="property"]')
fp = open('58.txt','w',encoding='utf-8')
for div in div_list:
    title = div.xpath('./a/div[2]/div/div/h3/text()')[0]
    print(title)
    fp.write(title+'\n')

项目实践:4k图片

from lxml import etree
import requests
import os

header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.41 Safari/537.36 Edg/101.0.1210.32'}
url = 'https://pic.netbian.com/4kyingshi/'

if not os.path.exists('./piclibs'):
    os.mkdir('piclibs')

response = requests.get(url=url,headers=header)
response.encoding = 'gbk'
page_text = response.text
tree = etree.HTML(page_text)
li_list = tree.xpath('//div[@class="slist"]/ul/li')

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'
   img_name = img_name.encode('iso-8859-1').decode('gbk')
   print(img_name,img_src)
   img_data = requests.get(url=img_src,headers=header).content
   img_path = 'piclibs/'+img_name
   with open(img_path,'wb') as fp:
       fp.write(img_data)
       print(img_name,'下载成功!!')

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值