# 解析原理:
# - 获取页面源码数据
# - 实例化一个etree对象,并且将页面源码数据加载到该对象中
# - 调用该对象的xpath方法进行指定标签定位
# - xpath函数必须结合着xpath表达式进行标签定位和内容捕获
# xpath表达式:
# - 属性定位: //div[@class="song"] 找到class属性值为song的div 返回一个列表
# - 索引层级定位: //div[@class="tang"]/ul/li[2]/a
# - 逻辑运算: //a[@href="" and @class="du"] 并且
# - 模糊匹配: //div[contains(@class, 'ng')] class包含 ng 的div
# //div[startwith(@class, 'ta')] class以 ta 开头的div
# - 取文本: //div[@class="song"]/p[1]/text() div下的文本内容
# //div[@class="tang"]//text() div下以及字标签下的文本内容 返回列表
# - 取属性: // div[@class="tang"]//a[1]/@href

下面上几个小案例:

import requests
from lxml import etree url = 'https://bj.58.com/ershoufang/?utm_source=sem-sales-baidu-pc&spm=85077276202.21974091622&utm_campaign=sell&utm_medium=cpc&showpjs=pc_fg' headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
} page_text = requests.get(url=url, headers=headers).text tree = etree.HTML(page_text)
li_list = tree.xpath('//ul[@class="house-list-wrap"]/li') # 返回的是Element对象
fp = open('58.csv', 'w', encoding='utf8')
for li in li_list:
title = li.xpath('./div[2]/h2/a/text()')[0] # 局部页面解析要加'.'
price1 = li.xpath('./div[3]//text()')
price = ''.join(price1)
fp.write(title+":"+price+'\n')
fp.close()
print('over')

爬取 58二手房信息

xpath 解析图片资源

import requests
from lxml import etree url = "http://pic.netbian.com/4kmeinv/" headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
}
page_text = requests.get(url=url, headers=headers).text tree = etree.HTML(page_text)
# etree.parse(page_text) 解析本地文件推荐使用
li_list = tree.xpath('//div[@class="slist"]/ul/li')
for li in li_list:
image_name = li.xpath('./a/b/text()')[0]
image_name = image_name.encode('iso-8859-1').decode('gbk')
image_url = 'http://pic.netbian.com'+li.xpath('./a/img/@src')[0]
image_path = './img/'+image_name+'.jpg'
img = requests.get(image_url).content
with open(image_path, 'wb') as f:
f.write(img)
print(image_path+'下载成功')

图片怎么爬取呢?

import requests
import base64
from lxml import etree headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
}
url = 'http://jandan.net/top'
response = requests.get(url=url, headers=headers)
page_text = response.text
tree = etree.HTML(page_text)
code_list = tree.xpath('//span[@class="img-hash"]/text()')
for img_code in code_list:
img_url = 'http:'+base64.b64decode(img_code).decode()
img_name = img_url.split('/')[-1]
img_path = f'./jd_img/{img_name}'
print(img_url)
content = requests.get(img_url).content
with open(img_path, 'wb') as f:
f.write(content)
print(img_name+'成功')
print('over')

有的时候我找不到我要的图片链接呀

上面是煎蛋网采用了js的方法对图片链接地址进行了base64的加密

# 简历模板爬取(ip禁用问题)
# 解决方法:
# ip代理,
# 请求头中添加Connection字段:close
import requests
import random
from lxml import etree url = 'http://sc.chinaz.com/jianli/free.html' headers = {
'Connection': 'close', # 每次请求成功之后,发马上断开连接(修改后有几率无法立即生效,出现Httppool...错误- 重新运行)
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
}
page_text = requests.get(url=url, headers=headers).text
tree = etree.HTML(page_text)
a_list = tree.xpath('//div[@id="container"]/div/a[1]')
for a in a_list:
title = a.xpath('./img/@alt')[0].encode('iso-8859-1').decode('utf-8')
detail_url = a.xpath('./@href')[0]
detail_text = requests.get(url=detail_url, headers=headers).text
d_tree = etree.HTML(detail_text)
down_url_list = d_tree.xpath('//div[@class="down_wrap"]//li/a/@href')
down_url = random.choice(down_url_list)
data = requests.get(down_url,headers=headers).content
with open(f'./简历模板/{title}.rar', 'wb') as f:
f.write(data)
print(title+'完成')
print('over')

站长之家模板资源爬取下载

爬虫之lxml - etree - xpath的使用的更多相关文章

  1. lxml etree xpath

    from lxml import etree #####################基本用法: ##################### html = ''' <h1 class=&quo ...

  2. Python爬虫利器三之Xpath语法与lxml库的用法

    前面我们介绍了 BeautifulSoup 的用法,这个已经是非常强大的库了,不过还有一些比较流行的解析库,例如 lxml,使用的是 Xpath 语法,同样是效率比较高的解析方法.如果大家对 Beau ...

  3. python爬虫(8)--Xpath语法与lxml库

    1.XPath语法 XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对元素和属性进行遍历.XPath 是 W3C XSLT 标准的主要元素,并且 XQuery ...

  4. Python爬虫教程-22-lxml-etree和xpath配合使用

    Python爬虫教程-22-lxml-etree和xpath配合使用 lxml:python 的HTML/XML的解析器 官网文档:https://lxml.de/ 使用前,需要安装安 lxml 包 ...

  5. 爬虫解析库:XPath

    XPath     XPath,全称 XML Path Language,即 XML 路径语言,它是一门在 XML 文档中查找信息的语言.最初是用来搜寻 XML 文档的,但同样适用于 HTML 文档的 ...

  6. 爬虫之 BeautifulSoup与Xpath

    知识预览 BeautifulSoup xpath BeautifulSoup 一 简介 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: '' ...

  7. Python爬虫之lxml-etree和xpath的结合使用

    本篇文章给大家介绍的是Python爬虫之lxml-etree和xpath的结合使用(附案例),内容很详细,希望可以帮助到大家. lxml:python的HTML / XML的解析器 官网文档:http ...

  8. lxml etree的一个问题

    <div> <a href="xxxx">123</a> <a href="xxxx">45</a> ...

  9. 【译】:lxml.etree官方文档

    本文翻译自:http://lxml.de/tutorial.html, 作者:Stefan Behnel 这是一个关于使用lxml.etree进行XML处理的教程.它简要介绍了ElementTree ...

随机推荐

  1. AOP拦截日志报错llegalStateException: It is illegal to call this method if the current request is not in asynchronous mode

    原文链接:https://my.oschina.net/mengzhang6/blog/2395893 关于一次AOP拦截入参记录日志报错的梳理总结 将服务发布到tomcat中后,观察服务的运行状态以 ...

  2. String 源码浅析(一)

    前言 相信作为 JAVAER,平时编码时使用最多的必然是 String 字符串,而相信应该存在不少人对于 String 的 api 很熟悉了,但没有看过其源码实现,其实我个人觉得对于 api 的使用, ...

  3. mysql 快照读MVCC

    mysql的读分快照读和当前读 快照读 是指写的同时,读不阻塞,达到并发的作用 这时候的读 是 记录的历史版本,存在于undo里,当然回滚时就的也是这个undo 当执行一条update语句时,记录本身 ...

  4. selenium上传图片

    在我们使用selenium的时候碰到上传图片.文件时一般都可以先定位然后直接send_keys,但是有的却不行,selenium也没有提供其它的办法,只能靠第三方软件来解决 我们要借助一个叫AutoI ...

  5. 省选后CTS/APIO前文化课划水记

    目前没有什么明确的目标,所以就叫划水吧. 第一周 4.9 (Tue) 早上 10:00 到学校,然后去仓库找了张桌子,搬到教室,开始自习生活. 拿出"必背古诗文",发现除了< ...

  6. 虚拟立方体调用非共享维度的时候需要指定cubeName,否则Schema无效

    但是,即使把非共享维度放上去,会出现一种情况. 一旦放入资产负债的非公共维度进去后,报表的度量值只能出现资产负债的度量值,不能出现损益的度量值了!

  7. 读取Cert格式证书的密钥

    不想存储Cert证书内容,只想存储证书密钥,可通过以下实现读取证书的密钥出来: package com.zat.ucop.service.util; import sun.misc.BASE64Enc ...

  8. Git版本回退和撤销修改

    版本回退: 在实际工作中,我们会不断对文件进行修改,然后不断提交修改到版本库里,一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit恢复,然后继续工作,而不是把几个月的工作成果全部丢失. ...

  9. MySQL约束和修改数据表知识集结

    一.约束 划分标准:功能.数据列的数目 功能: (1)NOT NULL(非空约束) (2)PRIMARY KEY(主键约束) (3)UNIQUE(唯一约束) (4)DEFAULT(默认约束) (5)F ...

  10. unittest之断言

    在测试用例中,执行完测试用例后,最后一步是判断测试结果是 pass 还是fail,自动化测试脚本里面一般把这种生成测试结果的方法称为断言(assert).用 unittest 组件测试用例的时候,断言 ...