xpath &

时间:2022-09-05 22:05:36

python : 3.6

lxml : 4.2.1

from lxml.html import etree

test_html = '''
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<body>
<table id="report1">
<tr rn="1" >
<td class="report1_1">1</td>
<td class="report1_1">2<br>3<br>4</td>
</tr>
<tr rn="1" >
<td class="report1_1">1.1</td>
<td class="report1_1">2.1<br>3.1<br>4.1</td>
</tr>
</table>
</body>
</html>
''' if __name__ == '__main__':
html = etree.HTML(test_html)
tag1 = html.xpath('/html/body/table/tr/td[1]')
tag2 = html.xpath('/html/body/table/tr/td[2]')
tag3 = html.xpath('/html/body/table/tr/td[2]/text()')
print('tag1-[0]-->',tag1[0].text)
print('tag2-[0]-->',tag2[0].text)
print('tag2-[1]-->', tag2[1].text)
print('tag3-->',tag3) b = [str(i) for i in tag3]
str = ''.join(b)
print('tag3-str-->',str) print('tag2-->',tag2)
print('tag2[0]-string-->',tag2[0].xpath('string(.)'))
print('tag2[1]-string-->',tag2[1].xpath('string(.)'))
tag1-[]-->
tag2-[]-->
tag2-[]--> 2.1
tag3--> ['', '', '', '2.1', '3.1', '4.1']
tag3-str--> 2342.13.14.1
tag2--> [<Element td at 0x18b9478aec8>, <Element td at 0x18b9478af88>]
tag2[]-string-->
tag2[]-string--> 2.13.14.1

代码在上面。

简单说一说:

requests配合xpath来抓网站数据的时候,不像selenium+xpath。

selenium有  find_element  find_elements,区别是带S ,查找第一个元素,和查找所有元素。

requests只有xpath,简单粗暴的直接查找所有元素。所以tag1,要带下标[0]来输出第一个对象,并且用.text来输出文字信息。

tag2,带下标[0]来输出第一个对象,并且用.text来输出文字信息。但是由于对象中有<br>标签,所以只能取得第一个<br>标签前面的数据。

tag3,我们在xpath规则中加入.text()规则,取得这个标签中的文字信息。由于有<br>标签,文字信息会因为<br>而分割称为列表。

我们可以自己重组列表,转为字符串:

b = [str(i) for i in tag3]
str = ''.join(b)
print('tag3-str-->',str)

或者不使用text()规则使用xpath('string(.)'):

print('tag2-->',tag2)
print('tag2[0]-string-->',tag2[0].xpath('string(.)'))
print('tag2[1]-string-->',tag2[1].xpath('string(.)'))

两种方式都可以正常获取td标签中带br标签的信息。

xpath & <tr><td><br>的更多相关文章

  1. jQuery遍历Table tr td td中包含标签

    function shengchen() { var arrTR = $("#tbModule").children(); var Context=""; $( ...

  2. 根据div 标签 查看数组&commat;class&equals;modulwrap 下面的&sol;table&sol;tbody&sol;tr&sol;td

    <div class="modulwrap"> <div class="request_title"> <span class=& ...

  3. html5 表格标签 table tr td

      最重要的三个 <table>     表格声明标签 属性: boarder    边框粗细 style    可配合css 使用 <tr>    行标签 table row ...

  4. HTML 表格&lt&semi;table&gt&semi;&lt&semi;caption&gt&semi;&lt&semi;th&gt&semi;&lt&semi;tr&gt&semi;&lt&semi;td&gt&semi;&lt&semi;thead&gt&semi;&lt&semi;tbody&gt&semi;&lt&semi;tfoot&gt&semi;&lt&semi;col&gt&semi;&lt&semi;colgroup&gt&semi;

    <table>标签: 定义和用法: <table>标签定义HTML表格. 简单的HTML表格由table元素以及一个或多个tr.th或td元素组成. tr元素定义表格行,th元 ...

  5. jQuery操作Table tr td常用的方法

    虽然现在DIV+CSS进行页的布局大行其道,但是很多地方使用table还是有很多优势,用table展示数据是比较方便的,下面汇总了jQuery操作Table tr td常用的方法,熟记这些操作技巧,下 ...

  6. 汇总常用的jQuery操作Table tr td方法

    虽然现在DIV+CSS进行页的布局大行其道,但是很多地方使用table还是有很多优势,用table展示数据是比较方便的,下面汇总了jQuery操作Table tr td常用的方法,熟记这些操作技巧,下 ...

  7. HTML中表格元素TABLE&comma;TR&comma;TD及属性的语法

    table:表格元素及属性 <table width="80%" border="1" cellspacing="1" cellpad ...

  8. 非正规写法获取不到tr&comma;td

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. html tr td colspan

    colspan  属性规定单元格可横跨的列数, 第一行的colspan规定其一行所跨越的列数,要与下一行的<td></td>个数一致 if(!empty ($alarmDesc ...

随机推荐

  1. c语言指针疑惑&lbrack;转载&rsqb;

    c99的动态数组是在栈上面开辟的,而new出来的是在堆上面开辟的.栈和堆的地址是从两端相向增长的.栈很小,一般只有几十k,vc6好像是64k.堆很大,在win32的虚拟地址空间可以分配到2g的内存.栈 ...

  2. rhel7网络管理

    实验-禁用网卡命名规则: 在GRUB_CMDLINE_Linux=“rd.lvm.lv=rhel/root  vconsole.keymap=us vconsole.font=latarcyheb-s ...

  3. SQL Server 存储&lpar;2&sol;8&rpar;:理解数据记录结构

    在SQL Server :理解数据页结构我们提到每条记录都有7 bytes的系统行开销,那这个7 bytes行开销到底是一个什么样的结构,我们一起来看下. 数据记录存储我们具体的数据,换句话说,它存在 ...

  4. 关于 SSIS 并行foreach loop的一个设计思路

    SSIS 包在控制流方面的性能优化,主要是提高并行度. 可以设置并发线程数MaxConcurrentExecuteables. SSIS中的foreach loop container 不是并行执行任 ...

  5. jquery多种方式实现输入框input输入时的onput&comma;onpropertychange&comma;onchange触发事件及区别

    有关inputs输入内容的事件监听,一般我们会想到下面几个关键词:onput,onpropertychange,onchange onput与onchange的一个区分 onput:该事件在 < ...

  6. angular4&period;0项目build发布后,刷新页面报错404

    angular4.0项目执行npm run build后,进入页面正常显示. 但是当刷新页面时,报错404,页面未找到. 出现这个问题的原因,应该是找不到路由地址导致的,然后找到了下面的解决方案. 找 ...

  7. windows IOCP入门的一些资料

    最近需要看一个中间件的IOCP处理模块,需要了解这方面的知识 https://www.codeproject.com/articles/13382/a-simple-application-using ...

  8. o2o的关健在于线下!

    其实,说到底,O2O不是那么简单的.一堆空降兵和一群自以为是的风投都把所有的线下产业想简单了.没有真正的去了解和体验这个产业,就动不动一个小点子,创新一个小平台就妄想能改变或替代中国某某产业.看看这几 ...

  9. Java学习技术分享:Java中的原子操作

    学习java需要有一套完整的学习线路,需要有条理性,当下学习java已经有一段时间了,由当初的懵逼状态逐渐好转,也逐渐养成了写技术学习笔记的习惯,今天总结了一下java中的原子操作. 1.Java中的 ...

  10. 快速使用CSS 弹性盒子

    布局的传统解决方案,基于盒状模型,依赖 display属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现:2009年,W3C提出了一种新的方案 ...