#coding:utf-8
'''
@author: li.liu
'''
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionBuilder, ActionChains
from lxml import etree
import urllib
import time
import re #url='http://www.baidu.com'
url='www.woyihome.com'
driver= webdriver.Chrome()
driver.get(url)
web_title=driver.title
def test1():
head=driver.current_window_handle
print driver.current_url
xpathset=set()
try:
html1=urllib.urlopen(url).read().decode('utf-8')
hetree=etree.HTML(html1)#lxml解析html
lxml1=etree.ElementTree(hetree)#lxml.etree解析html
hiter=hetree.iter()#加载到迭代器中
#print hiter
str1='' for t in hiter:#遍历每个元素
for item in t.items():#遍历每个元素的属性
c=0
d=0
for i in item:#遍历每个属性的名字和值
if i == 'id':#查找属性名为id的元素
str1 ='//*[@'+i+'="'+item[c+1]+'"]'##通过id属性值定位达到元素
xx=lxml1.xpath(str1)#查找元素
#print '\n',xx
lgx=lxml1.getpath(xx[0])#查找元素路径
#print lgx
s= lxml1.xpath(str1+'//*')#查找子元素生成list列表
for s1 in s:#遍历所有属性为str1的子元素
#print s1.text
#print lxml1.getpath(s1)
for ss1 in s1.items():#遍历str1子元素的属性
for sss1 in ss1 :#遍历属性名和值
try:
#print sss1
lgs1=lxml1.getpath(s1)#获取str1子元素s1的路径
path_split=lgs1.split(lgx)[1]#分割子处理元素属性值的字符串
str3=str+path_split#生成xpath
print '\n',str3
xpathset.add(str3) except:pass
#else:
#pass
#print lxml1.getpath(s1)
#print i,'\n'
c+=1
d+=1
print '.',
print '\r'
'''
for i in xpathset:
print i try:
driver.find_element_by_xpath(i).text
driver.find_element_by_xpath(i).click()
durll=driver.current_url
headx=driver.window_handles
#print headx
print '当前页面地址:\n',durll
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 '101.37.179.183' in durl:
driver.close()
driver.switch_to_window(headx[0])
else:
k=1
break else:
driver.get(url) except:
pass
'''
print len(xpathset)
#print '\t' #driver.get('http://101.37.179.183')
#print driver.title finally:
#driver.quit()
print '...'
'''
try:
time.sleep(1)
#print driver.find_element_by_xpath('//*[@id="wrapper"]'),1
#print driver.find_element_by_xpath('//*[@id="wrapper"]/div[2]/a[1]')
driver.find_element_by_xpath(str1)
time.sleep(50000)
finally:
print 3
driver.quit()
''' def test2():
http_dict={}
durll=''
http_dict[durll]=[]
head=driver.current_window_handle
xpath_dict={}
xpathset=set()
#try:
html1=urllib.urlopen(url).read().decode('utf-8')
hetree=etree.HTML(html1)#lxml解析html
lxml1=etree.ElementTree(hetree)#lxml.etree解析html
hiter=hetree.iter()#加载到迭代器中
#print hiter
hid1=lxml1.xpath('//*[@id]')
hid=lxml1.xpath('//*[@id]//*')
for t in hid1:
id_items=t.items()
print t.items()#打印id属性的元素所有属性
tpath=lxml1.getpath(t)
print tpath#打印id属性的元素的路径 for id in id_items:
if 'id' in id[0]:
str1='//*[@id="'+id[1]+'"]'
xpath_dict[str1]=[]
#print xpath_dict
print str1
str3=str1+'//*'
print str3
id_list= lxml1.xpath(str3)
for idist in id_list:
idpath= lxml1.getpath(idist)
idxpathlist=idpath.split(tpath)
if len(idxpathlist)>1:
id_xpath=str1+idxpathlist[1]
xpath_dict[str1].append(id_xpath)
#print xpath_dict[str1]
#print idxpathlist
#else:
#print '+++++++++++++++++++++++++++++++++++++++'
#print idxpathlist,'stop',len(idxpathlist)
print '=============================================='
cont=0
k=0 for i in xpath_dict:
#print xpath_dict[i]
for t in xpath_dict[i]:
durll=''
try:
time.sleep(1)
elem_text=driver.find_element_by_xpath(t).text
driver.find_element_by_xpath(t).click()
durll=driver.current_url
headx=driver.window_handles
#print headx if len(headx)!=1:
driver.switch_to_window(headx[1])
durll= driver.current_url
print '链接元素名:',elem_text
print '页面名:',driver.title
print '当前页面地址:\n',durll
print t,'\n'
if '101.37.179.183' in durll:
driver.close()
driver.switch_to_window(headx[0])
else:
k=1
break
else:
if driver.title !=web_title:
print '链接元素名:',elem_text
print '页面名:',driver.title
print '当前页面地址:\n',durll
print t,'\n'
driver.back()
pass except:
if k==1 or 'localhost' in durll:
pass
else:
try:
print '动态首项xpath:',dict[i][0]
elem=driver.find_element_by_xpath(xpath_dict[i][0])
ActionChains(driver).move_to_element(elem).perform()
time.sleep(1)
driver.find_element_by_xpath(t).click()
print '当前动态页面地址为:','\n',driver.current_url
print t,'\n'
if driver.title !=web_title:
t1= '链接元素名:'+elem_text
t2= '页面名:'+driver.title
t3= '当前页面地址:'+durll
print t1,'\n',t2,'\n',t3,'\n',t,'\n'
http_dict[durll].append(t1)
http_dict[durll].append(t2)
http_dict[durll].append(t3)
driver.back()
except(Exception):
pass
#print Exception cont+=1
print cont with open('E:/1/http.txt', 'w') as handle:
for t in http_dict:
str2=t+''+str(http_dict[t])
handle.writelines(str2) test2()
print '结束'
#driver.quit()

Python 通过lxml 解析html页面自动组合xpath实例的更多相关文章

  1. Python爬虫 | Beautifulsoup解析html页面

    引入 大多数情况下的需求,我们都会指定去使用聚焦爬虫,也就是爬取页面中指定部分的数据值,而不是整个页面的数据.因此,在聚焦爬虫中使用数据解析.所以,我们的数据爬取的流程为: 指定url 基于reque ...

  2. Python 之lxml解析库

    一.XPath常用规则 二.解析html文件 from lxml import etree # 读取HTML文件进行解析 def parse_html_file(): html = etree.par ...

  3. python的lxml解析器

    from lxml import etree import codecs import sys from lxml import etree def parser(p): tree = etree.H ...

  4. Python爬虫——使用 lxml 解析器爬取汽车之家二手车信息

    本次爬虫的目标是汽车之家的二手车销售信息,范围是全国,不过很可惜,汽车之家只显示100页信息,每页48条,也就是说最多只能够爬取4800条信息. 由于这次爬虫的主要目的是使用lxml解析器,所以在信息 ...

  5. Python爬虫之解析网页

    常用的类库为lxml, BeautifulSoup, re(正则) 以获取豆瓣电影正在热映的电影名为例,url='https://movie.douban.com/cinema/nowplaying/ ...

  6. python爬虫中XPath和lxml解析库

    什么是XML XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 的标签需要 ...

  7. python爬虫网页解析之lxml模块

    08.06自我总结 python爬虫网页解析之lxml模块 一.模块的安装 windows系统下的安装: 方法一:pip3 install lxml 方法二:下载对应系统版本的wheel文件:http ...

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

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

  9. python中html解析-Beautiful Soup

    1. Beautiful Soup的简介 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: Beautiful Soup提供一些简单的.pyt ...

随机推荐

  1. 负载均衡Nginx和F5的区别

    今早上看书,看到为了保证Zuul的高可用性,在Zuul的前端可以使用Nginx或F5再次进行负载转发 使用过Nginx,那F5是什么,他们有什么区别吗? (1)F5 F5负载均衡器是应用交付网络的全球 ...

  2. Spring boot + mybatis + oracle代码生成器

    在pom文件中加入依赖: <build> <plugins> <!--逆向工程--> <plugin> <groupId>org.mybat ...

  3. PAt 1099

    1099 Build A Binary Search Tree (30 分)   A Binary Search Tree (BST) is recursively defined as a bina ...

  4. 深度学习-强化学习(RL)概述笔记

    强化学习(Reinforcement Learning)简介 强化学习是机器学习中的一个领域,强调如何基于环境而行动,以取得最大化的预期利益.其灵感来源于心理学中的行为主义理论,即有机体如何在环境给予 ...

  5. lcd12864菜单

    最近一段时间学习了一下lcd12864屏幕的驱动(本人使用的是带字库的st7920驱动芯片). 1.该屏幕可以是串行驱动,或者并行驱动. 2.该屏幕的显示分为2部分,文字显示区DDRAM,图像显示区G ...

  6. JZOJ5833 永恒

    题目大意 给你一个树,每个节点上有有一个部落,以及部落的人数,要你求出每个节点的子树里面人数最多的部落是哪一个(人数相同部落编号最小的). 思路 全网第一篇分治题解 考虑树的dfs序,然后分治处理,每 ...

  7. IDEA debug断点调试技巧

    Debug用来追踪代码的运行流程,通常在程序运行过程中出现异常,启用Debug模式可以分析定位异常发生的位置,以及在运行过程中参数的变化.通常我们也可以启用Debug模式来跟踪代码的运行流程去学习三方 ...

  8. 在Java中如何设置一个定时任务,在每天的一个时间点自动执行一个特定的程序

    Quartz定时机制 首先导入jar包到程序内 quartz-all-1.6.0.jar 然后创建一个XML TimeConfig.xml 名字可以自己定义 <?xml version=&quo ...

  9. np.minimum()与tf.minimum()的用法

    总结:二者用法一致.a=np.array([[[[10,8,3,9],[5,6,7,8]]],[[[1,2,3,4],[5,6,7,8]]],[[[1,2,3,4],[5,6,7,8]]]] )pri ...

  10. 文件包含漏洞File Inclusion

    文件包含漏洞 目录遍历漏洞在国内外有许多不同的叫法,也可以叫做信息泄露漏洞.非授权文件包含漏洞等. 文件包含分类 LFI:本地文件包含(Local File Inclusion) RFI:远程文件包含 ...