# h1 = doc.xpath('//h1/text()')
# print(h1)
# 获取a标签的href属性
# a_attrs = doc.xpath('//a/attribute::href')
# a_texts = doc.xpath('//a/text()')
content = doc.xpath('//div[contains(@class, "article-content")]')
fn:contains(string1,string2)的用法
fn:contains(string1,string2)
如果 属性string1 包含 string2,则返回 true,否则返回 false。
例子:contains('XML','XM') 结果:true
如,xml的结构如下:
<?xml version="1.0" encoding="utf-8"?>
<root>
<sub name="a1" type="sub" order="1">
abcd1
</sub>
<sub name="a3" type="sub" order="2">
abcd2
</sub>
<sub name="a2" type="sub" order="3">
abcd3
</sub>
<sub name="a4" type="sub" order="3">
abcd4
</sub>
</root>
选取属性 order包含'3'的节点 xPath写法为:
"/root/sub[contains(@order,'3')]"
div = doc.xpath('//div[contains(@class,"article-content")]/p') #itertext() 获取节点下所有元素文本
#print(div) # div 下面属性class包含article-content的下面P的文档-- 列表
content = ''
for x in div:
print(x.itertext())
content += ''.join(x.itertext()).strip()
intertext() 获取节点下的所有元素文本
cssselect 使用方法
source = download("https://www.xxx.com")
doc = etree.HTML(source)
title =doc.cssselect('h1')
print(title[0].text)
article = doc.cssselect('div.article-content p>img')
metas = doc.cssselect('.benwenshuxing ul.txt-list-1 li')
etree.tostring( ).decode('utf-8') 个比如你获取到正文了,但是你想要里面的HTML源码,而不是纯文本的时候. 可以通过tostring() 实现
etree.HTML(source) 将html内容转化为文档数 格式为<Element html at 0x1fd33b68400>
import requests
from lxml import etree
from html import unescape
source = requests.get('http://www.xiaoxingyun.net/').text
doc = etree.HTML(source) # 将html内容转化为文档数 格式为<Element html at 0x1fd33b68400>
table_element = doc.xpath("//title")
s1 = etree.tostring(table_element[0]).decode('utf-8')
# 将HTML编码转换为字符串表示
article_content = unescape(s1)
print(article_content)
获取图片url
# print(doc.xpath('//title')[0].text) # doc.xpath('//title') 返回一个列表
# scr = doc.xpath('//span[@id ="zhaiyaotu"]/a/img/attribute::src') 获取img下的src
# img = doc.xpath('//span[@id ="zhaiyaotu"]/a/img') 获取图片链接
# img = doc.cssselect('span#zhaiyaotu a img') 也是获取图片链接
# for x in content:
# tag_string = etree.tostring(x).decode('utf-8')
# print(unescape(tag_string))