一周目,爬虫 十日

Xpath解析器

1  导入模块的方法

1导入模块
from lxml import etree
2启用xpath解析器
html = etree.HTML(doc)

2  xpath解析器使用

查找标签

1    *表示所有
    a = html.xpath('//*')  # 匹配所有的标签
2    //表示子标签后面更标签名
    a = html.xpath('//head')  # 匹配所有的head标签
3    子标签与后代标签
    a = html.xpath('//div/a')  # 匹配div标签内部所有的儿子a标签
    a = html.xpath('//body/a')  # 没有符合条件的儿子a
    a = html.xpath('//body//a')  # 匹配div标签内容所有的后代a标签
    a = html.xpath('//body//a')  # 也可以匹配到
4    @表示属性查找
    a=html.xpath('//body//a[@href="image1.html"]')  
        # 属性查找 获取body内部所有的href=image1.html后代a标签
     a = html.xpath('//body//a[1]')  # 取第一个body内部的a标签
5    ..表示返回上一级的父标签
    a = html.xpath('//body//a[@href="image1.html"]/..')  
        # 表示获取所有的href=image1.html后代a标签的上一级父标签
   a = html.xpath('//body//a[1]/parent::*')
        #    查找父标签的其他写法

查找文本

1    获取标签内部文本
    a = html.xpath('//body//a[@href="image1.html"]/text()')
        #获取body内部属性为image.1的a标签的文本
    a = html.xpath('//body//a/text()')
        ## 获取body内部所有后代a内部文本,并以列表展示
2    属性查找
    a = html.xpath('//body//a/@href')
        #展示body内部所有子标签a的herf的属性
3    索引查找,从1开始而非0开始
    a = html.xpath('//body//a[2]/@href')
        #    展示body内部第二个a标签的herf属性
4    属性单个以及多个查找,=表示直接查找,用contains表示包含
    a=html.xpath('//body//a[@class="li"]') 
        # 查找class只有等于li的a标签
    a = html.xpath('//body//a[contains(@class,"li")]/text()')
        #    查找class含有li的a标签的文本
5    多个属性匹配,可用关系and和or
    a = html.xpath('//body//a[contains(@class,"li") or @name="items"]')
        # or,关系一个成立
    a = html.xpath('//body//a[contains(@class,"li") and @name="items"]/text()')
        #  and 关系都成立
6    反向取
    a = html.xpath('//a[last()]/@href')
        #取最后一个,不写默认为0,从0开始
    a = html.xpath('//a[last()-2]/@href')
        #取最后第三个
7    按位数取    关键词    position()
    a = html.xpath('//a[position()<3]/@href')
        #   取位数小于3的,即取前两位

了解补充

# 1 节点轴选择
# ancestor:祖先节点
# 使用了* 获取所有祖先节点
a = html.xpath('//a/ancestor::*')
# # 获取祖先节点中的div
a = html.xpath('//a/ancestor::div')
# attribute:属性值
a = html.xpath('//a[1]/attribute::*')  # 查找a标签内部所有的属性值
# child:直接子节点
a = html.xpath('//a[1]/child::*')
# descendant:所有子孙节点
a = html.xpath('//a[6]/descendant::*')
# following:当前节点之后所有节点
a = html.xpath('//a[1]/following::*')
a = html.xpath('//a[1]/following::*[1]/@href')
# following-sibling:当前节点之后同级节点
a = html.xpath('//a[1]/following-sibling::*')
a = html.xpath('//a[1]/following-sibling::a')
a = html.xpath('//a[1]/following-sibling::*[2]/text()')
a = html.xpath('//a[1]/following-sibling::*[2]/@href')
print(a)

 3  用模块打开游览器查询

from selenium import webdriver
from selenium.webdriver.common.keys import Keys  # 键盘按键操作
import time

bro = webdriver.Chrome()
# 打开淘宝
bro.get('https://www.taobao.com/')
# 查找搜索框标签
input_tag = bro.find_element_by_id('q')
# 输入文本内容
input_tag.send_keys('iphone手机')
time.sleep(1)
# 点击搜索
input_tag.send_keys(Keys.ENTER)
time.sleep(5)
# 关闭浏览器
bro.close()

 

posted @ 2021-09-27 22:34  aa_wang  阅读(43)  评论(0)    收藏  举报