解析器和selenium的使用
-
pyquery的使用
from pyquery import PyQuery # 1.创建PyQuery对象 # PyQuery # pq = PyQuery(需要解析的html字符串) html = open('test.html', encoding='utf-8').read() pq = PyQuery(html) # pq对应的容器中只有一个html标签 # 2.通过选择器获取子标签 # PyQuery对象(选择器)——获取css选择器选中的标签对应的pyQuery对象 ps = pq('p') print(ps, type(ps)) # 运行结果为: # <p>我是p标签</p> # <p>我是p2标签</p> # <p>111111111</p> # <p class="c1">222222222</p> # <p>333333333</p> # <p class="c1">444444444</p> # <p>555555555</p> # <p class="c2">666666666</p> # <class 'pyquery.pyquery.PyQuery'> # 在整个html中获取b标签(pq对应的容器中只有html一个标签) print(pq('b')) # <b>加粗1</b><b>加粗2</b> # 在所有的p标签中获取b标签(ps对应的容器中是整个页面中所有的p标签) print(ps('b')) # <b>加粗1</b> # 选择ps中第一个p标签中的b标签 print(f'ps中第一个元素类型{type(ps[0])}') # ps中第一个元素类型<class 'lxml.html.HtmlElement'> print(ps[0]) # <Element p at 0x353a810> print(PyQuery(ps[0])('b')) # <b>加粗1</b> # 或者 p1 = PyQuery(ps[0]) print(p1('b')) # <b>加粗1</b> # 3.获取标签内容,标签属性 # PyQuery对象.text()——功能只对PyQuery类型起作用 result = pq('h1').text() print(result) # 标题1 # 同时获取所有a标签的内容 result = pq('a').text() print(result) # 百度 京东 爱奇艺 # 单独获取a标签内容 for a in pq('a'): print(PyQuery(a).text()) # 结果为: # 百度 # 京东 # 爱奇艺 # 4.获取标签属性 # PyQuery对象.attr(属性名) # 获取第一个a标签的href属性 result = pq('a').attr('href') print(result) # www.baidu.com # 获取每个a标签的href属性 for a in pq('a'): print(PyQuery(a).attr('href')) # www.baidu.com www.jd.com
-
xpath的使用
# 主要用于解析数据 from lxml import etree # 1.构建指定的树结构,并且获取根节点 # html = etree.HTML(需要解析的网页数据) html = etree.HTML(open('test.html', encoding='utf-8').read()) # 2.根据路径获取节点(标签) # 节点对象.xpath()——获取指定节点对应的所有节点对象对应列表 a_list = html.xpath('/html/body/div/a') print(a_list) # [<Element a at 0x2a8b500>, <Element a at 0x2a8b540>, <Element a at 0x2a8b580>] # 3.路径的写法 # 1)绝对路径:/绝对路径 # 注意:绝对路径必须从根节点开始写。 result1 = html.xpath('/html/body/h1') result2 = a_list[0].xpath('/html/body/h1') print(f'result1:{result1}') # result1:[<Element h1 at 0x2aba5c0>] print(f'result2:{result2}') # result2:[<Element h1 at 0x2aba5c0>] # 2)相对路径 result4 = html.xpath('./body/h1') # 从当前节点开始 print(result4) # [<Element h1 at 0x2a85d00>] div = html.xpath('/html/body/div')[0] # 只取第一个div节点 print(div) # <Element div at 0x2a86f80> # 绝对路径 img1 = div.xpath('/html/body/div/img') print(img1) # [<Element img at 0x2a89300>] # 相对路径(.表示当前节点,..表示当前节点的上层节点)(./可以省略) img2 = div.xpath('./img') print(img2) # [<Element img at 0x2a89300>] # 路径的最后加/text()可以获取标签内容 result5 = div.xpath('../b/text()') print(result5) # ['加粗2'] # 拿不到内部子标签的内容 p = html.xpath('./body/p/text()') print(p) # ['段落1'] # 3)//——全文检索 # //p——获取整个页面所有的p标签对应的节点 # //div/p——获取整个div下面的p标签 result6 = html.xpath('//p') # ['加粗2'] result7 = div.xpath('//p') # ['段落1'] result8 = html.xpath('/html/body/div//p/text()') print(result8) # ['我是p标签'] result9 = div.xpath('.//p/text()') print(result9) # ['我是p标签', '我是p2标签'] # 3.获取内容和属性 # 获取内容——在路径最后加/text() # 获取属性——在路径后边加/@属性名 result10 = html.xpath('//a/@href') print(result10) # ['www.baidu.com', 'www.jd.com', 'www.aiqiyi.com'] # 获取所有属性值 result11 = html.xpath('//@id') print(result11) # ['1', '2'] # 4.谓语——筛选条件 # [N]——获取第N个指定标签 result = div.xpath('./a[1]/text()') print(result) # ['百度'] result = html.xpath('./body/div/p/text()') print(result) # ['111111111', '2222222222'] result = html.xpath('./body/div/p[1]/text()') print(result) # ['111111111'] # [last()]——最后一个 # [last()-N]——倒数第N+1个 result = html.xpath('./body/div[2]/p[position()<=4]/text()') # 谓语是从1开始 print(result) # ['111111111', '222222222', '333333333', '444444444'] # [@属性名]——拥有指定属性名的标签 result = html.xpath('./body/div[2]/p[@class]/text()') print(result) # ['222222222', '444444444', '666666666'] # [@属性名=值]——指定属性是指定值的标签 result = html.xpath('./body/div[2]/p[@class="c1"]/text()') print(result) # ['222222222', '444444444'] result = html.xpath('./body/div[1]/*/*/text()') print(result) # ['我是p标签', '我是p2标签'] result = html.xpath('//img/@*') print(result) # ['https://', '警告', '名字'] result = html.xpath('./body/div[1]/p/text()|./body/div[1]/a/text()') print(result) # ['百度', '京东', '爱奇艺']
-
selenium的使用
from selenium import webdriver # 创建浏览器对象(谷歌浏览器) b = webdriver.Chrome() # b.get('https://www.douyu.com') b.get('http://baidu.com') print(b.page_source)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。