#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的更多相关文章

  1. python在lxml中使用XPath语法进行#数据解析

    在lxml中使用XPath语法: 获取所有li标签: from lxml import etree html = etree.parse('hello.html') print type(html) ...

  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. lxml模块(应用xpath技术)

    一.lxml介绍 第三方库lxml是第一款表现出高性能特征的python xml库,天生支持Xpath1.0.XSLT1.0.定制元素类,甚至python风格的数据绑定接口.lxml是通过Cpytho ...

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

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

  7. Python:lxml

    学习自: python3解析库lxml - Py.qi - 博客园 lxml官方文档 lxml官方文档--lxml中的类.方法使用,如果需要查看某些方法的具体用法,就到这个网页下 python爬虫系列 ...

  8. python创建与遍历List二维列表

    python创建与遍历List二维列表 觉得有用的话,欢迎一起讨论相互学习~Follow Me python 创建List二维列表 lists = [[] for i in range(3)] # 创 ...

  9. 【转】python 三种遍历list的方法

    [转]python 三种遍历list的方法 #!/usr/bin/env python # -*- coding: utf-8 -*- if __name__ == '__main__': list ...

随机推荐

  1. Spring boot启动成功后输出提示

    添加logback-spring.xml,将log输出到文件,控制台输出的level改为error因此只会出处banner src/main/resources/banner.txt的内容为 star ...

  2. (CSDN迁移)JAVA多线程实现-单线程化线程池newSingleThreadExecutor

    JAVA通过Executors提供了四种线程池,单线程化线程池(newSingleThreadExecutor).可控最大并发数线程池(newFixedThreadPool).可回收缓存线程池(new ...

  3. 在Angular中使用element

    在angular中使用element 1.在一个新建的angular的项目中插入element npm i --save element-angular 2.在项目中的styles.css中插入文件, ...

  4. Mybaties的简单使用(全当做复习了)

    在使用mybaties的时候,最容易忘掉的是他的动态SQL,不过网上有关这方面的文章很多. 在动态SQl中最常见的几种SQL的语法就是: if choose (when, otherwise) tri ...

  5. linux vi/vim 编辑器学习总结

    linux vi/vim 编辑器学习总结 很多时候我们开发人员不可避免的会涉及到项目部署,这个时候使用的就不是我们所熟知的 Windows 和 Mac OS 操作系统了,而是类 Unix 系统.项目部 ...

  6. Java开发笔记(一百四十九)引入预报告的好处

    前面介绍了各种SQL语句的调用过程,虽然例子代码写死了每个SQL串,但是完全可以把查询条件作为方法参数传进来.比如现在想删除某个课程的教师记录,那么在编写删除方法时,就把课程名称作为该方法的一个输入参 ...

  7. STL源码剖析——序列式容器#4 Stack & Queue

    Stack stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口,元素的新增.删除.最顶端访问都在该出口进行,没有其他位置和方法可以存取stack的元素. ...

  8. Linux目录结构(目录结构详解是重点)

    1.Linux目录与Windows目录对比 1.Windows目录结构 2.Linux目录结构 深刻理解Linux 树状文件目录是非常重要的,只有记住他们,你才能在命令行中任意切换,想去哪里去哪里 2 ...

  9. 【基本知识】FMS有限状态机设计

    有限状态机是Verilog中十分基本也是十分重要的知识.本文对有限状态机做了一个简单介绍. 1.状态机三要素 有限状态机具有三个要素:状态跳转.跳转判断.状态操作: 1)状态跳转:现态跳转到次态: 2 ...

  10. Python全栈开发相关课程

    Python全栈开发 Python入门 Python安装 Pycharm安装.激活.使用 Python基础 Python语法 Python数据类型 Python进阶 面向对象 网络编程 并发编程 数据 ...