xpath & <tr><td><br>
amp gt lt xpath tr TD Br
2023-09-27 14:22:22 时间
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-[0]--> 1 tag2-[0]--> 2 tag2-[1]--> 2.1 tag3--> ['2', '3', '4', '2.1', '3.1', '4.1'] tag3-str--> 2342.13.14.1 tag2--> [<Element td at 0x18b9478aec8>, <Element td at 0x18b9478af88>] tag2[0]-string--> 234 tag2[1]-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标签的信息。
相关文章
- <二代測序> 批量下载 NCBI sra 文件
- <LeetCode OJ> 26 / 264 / 313 Ugly Number (I / II / III)
- <图形图像,动画,多媒体> 读书笔记 --- AirPlay
- 【问题】bzip2 --version 2>&1 < /dev/null
- 超全面的JavaWeb笔记day18<事务&连接池&DBUtils>
- 超全面的JavaWeb笔记day08<Tomcat&Web应用&HTTP协议>
- day01<计算机基础知识&Java语言基础>
- <link>:外部资源链接元素
- 在CTime类中重载<<和>>
- Cocos2dx-3.1.1 冒险01----> 文件夹结构、新项目project创建并执行
- STM32学习之路-LCD(3)<显示图片>
- 【我所认知的BIOS】—> uEFI AHCI Driver(4) — 第一个Protocol真难搞
- 转义字符 HTML 字符实体 < >: &等
- 我的Android进阶之旅------>Android关于ImageSpan和SpannableString的初步了解
- 我的Android进阶之旅------>Android嵌入图像InsetDrawable的用法
- 我的Java开发学习之旅------>计算从1到N中1的出现次数的效率优化问题
- 我的Java开发学习之旅------>解惑Java进行三目运算时的自动类型转换
- 我的Java开发学习之旅------>工具类:Java使用正则表达式分离出字符串中的中文和英文
- 我的Android进阶之旅------>Android图片处理(Matrix,ColorMatrix)
- 我的Android进阶之旅------>Android疯狂连连看游戏的实现之开发游戏界面(二)
- 我的设计模式学习笔记------>Java设计模式总概况
- 我的Android进阶之旅------>Android服务的生命周期回调方法
- Java语言实现简单FTP软件------>本地文件管理模块的实现(九)
- 我的Android进阶之旅------>Android权限参考大全
- 我的Android进阶之旅------>Android之进度条(ProgressBar)的功能和用法