Python 通过lxml遍历html xpath
#coding:utf-8
'''
Created on 2017年10月9日 @author: li.liu
'''
from selenium import webdriver
from lxml import etree
import urllib
import urllib2
import time #url='http://www.woyihome.com'
url='http://sso.woyihome.com/sso/pc-login'
#url='http://www.baidu.com'
user_agent='Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36'
values = {'name' : 'WHY',
'location' : 'SDU',
'language' : 'Python' } headers = { 'User-Agent' : user_agent }
data = urllib.urlencode(values)
req = urllib2.Request(url, data, headers)
response = urllib2.urlopen(req)
html1= response.read().encode('utf-8') def test1():
x1={} #html1=urllib.urlopen(url).read().decode('utf-8')
#print html1
hxml=etree.HTML(html1)
#print hxml
htree=etree.ElementTree(hxml)
#print htree
id_dite=htree.xpath('//*[@id]')
#print id_dite
coun=0
for id_items in id_dite:
#print id_items.items()
#print htree.getpath(id_items)
for id_item in id_items.items():
#print id_item
if id_item[0]=='id':
id_str='//*[@id="'+id_item[1]+'"]'
x1[id_str]=[]
#print id_str
id_path=htree.getpath(htree.xpath(id_str)[0])
#print id_path
id_str1=id_str+'//*'
idelem_list=htree.xpath(id_str1)
#print idelem_list
for e in idelem_list:
if len(e.items())==0:
pass
else:
e_path=htree.getpath(e)
#print e_path
e_path1=e_path.split(id_path)
#print e_path1[1]
if len(e_path1)>1:
e_str=id_str+e_path1[1]
e_list=e_str.split('/')
if 'li' in e_list[len(e_list)-1] or 'ul' in e_list[len(e_list)-1] or 'span' in e_list[len(e_list)-1]:
pass
else:
#print e_str
coun+=1
x1[id_str].append(e_str)
'''
for i in x1:
#print i
for i1 in x1[i]:
print i1 '''
a=0
b=0
driver=webdriver.Chrome()
driver.get(url)
#print driver.title
for i in x1:
#print i
for i1 in x1[i]:
#print i1
try:
d=driver.find_element_by_xpath(i1)
a+=1
print d.text
time.sleep(2)
driver.find_element_by_xpath(i1).click()
headx=driver.window_handles
#print headx
print '当前页面地址:\n',driver.current_url
time.sleep(1)
print i,'\n'
if len(headx)!=1:
driver.switch_to_window(headx[1])
durl= driver.current_url
print '当前页面地址:\n',durl,'\n'
if 'woyihome' in durl:
driver.close()
driver.switch_to_window(headx[0])
else:
k=1
break
elif 'localhost' in driver.current_url: print a
except :
pass
#print b
print a #driver.quit() #print '====================================================' print coun test1()
Python 通过lxml遍历html xpath的更多相关文章
- python在lxml中使用XPath语法进行#数据解析
在lxml中使用XPath语法: 获取所有li标签: from lxml import etree html = etree.parse('hello.html') print type(html) ...
- Python爬虫利器三之Xpath语法与lxml库的用法
前面我们介绍了 BeautifulSoup 的用法,这个已经是非常强大的库了,不过还有一些比较流行的解析库,例如 lxml,使用的是 Xpath 语法,同样是效率比较高的解析方法.如果大家对 Beau ...
- python爬虫(8)--Xpath语法与lxml库
1.XPath语法 XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对元素和属性进行遍历.XPath 是 W3C XSLT 标准的主要元素,并且 XQuery ...
- Python爬虫教程-22-lxml-etree和xpath配合使用
Python爬虫教程-22-lxml-etree和xpath配合使用 lxml:python 的HTML/XML的解析器 官网文档:https://lxml.de/ 使用前,需要安装安 lxml 包 ...
- lxml模块(应用xpath技术)
一.lxml介绍 第三方库lxml是第一款表现出高性能特征的python xml库,天生支持Xpath1.0.XSLT1.0.定制元素类,甚至python风格的数据绑定接口.lxml是通过Cpytho ...
- Python爬虫之lxml-etree和xpath的结合使用
本篇文章给大家介绍的是Python爬虫之lxml-etree和xpath的结合使用(附案例),内容很详细,希望可以帮助到大家. lxml:python的HTML / XML的解析器 官网文档:http ...
- Python:lxml
学习自: python3解析库lxml - Py.qi - 博客园 lxml官方文档 lxml官方文档--lxml中的类.方法使用,如果需要查看某些方法的具体用法,就到这个网页下 python爬虫系列 ...
- python创建与遍历List二维列表
python创建与遍历List二维列表 觉得有用的话,欢迎一起讨论相互学习~Follow Me python 创建List二维列表 lists = [[] for i in range(3)] # 创 ...
- 【转】python 三种遍历list的方法
[转]python 三种遍历list的方法 #!/usr/bin/env python # -*- coding: utf-8 -*- if __name__ == '__main__': list ...
随机推荐
- 使用vue搭建应用二加入element
安装使用 element 1.安装 yarn add element-ui 2.使用 (1)在 main.js 中引入 element main.js 为修改 import Vue from 'vue ...
- python 职责链模式
模式定义 责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链. 这种模式给予请求的类型,对请求的发送者和接收者进行解耦. 这种类型的设计模式属于 ...
- 57 容器(十一)——Collections容器工具类
Collections是一个工具类,它提供了与集合操作有关的方法,好比数组中的Arrays工具类.(jdk中的工具类名都是xxxs,有关工具类名参考:https://zhuanlan.zhihu.co ...
- go switch 和java C#有不同
1 switch 后的语句可以有简单的赋值语句 2 case :后的语句结束后不需要break;默认自动结束 除非以 fallthrough 语句结束,否则分支会自动终止 没有条件的 switch 有 ...
- Migrate to AndroidX 遇到的坑
Androidx 迁移方法: 首先把 gradle 版本改为3.2.0以上,以及 compileSdkVersion 为28以上 然后 Android Studio 菜单栏 Refactor -> ...
- C# vb .net实现焦距灰度特效滤镜
在.net中,如何简单快捷地实现Photoshop滤镜组中的焦距灰度效果呢?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第 ...
- igel udc2 config
igel udc2 config 系统安装盘下载地址 http://www.myigel.biz/?forcedownload /config/bin/igelone_config #!/bin/sh ...
- Django之创建超级用户
本文链接来自:https://blog.csdn.net/HuaCode/article/details/79721673 首选创建一个新用户,用来登录Django管理网站,进入manage.py目录 ...
- mysql-表关系介绍(应用较多)
目录 表之间的关系(重点) foreign key (外键) 级联操作 (cascade) 两种级联操作 外键的使用 多对一(一对多) 多对多 一对一关系 表之间的关系(重点) foreign key ...
- Python基础知识(四)
Python基础知识(四) 一丶列表 定义格式: 是一个容器,由 [ ]表示,元素与元素之间用逗号隔开. 如:name=["张三","李四"] 作用: 存储任意 ...