xpath & 时间:2023-11-18 18:03:44python : 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标签的信息。相关文章Html table、thead、tr、th、td 标签[转]jquery遍历table的tr获取td的值tr th tdjQuery 获取遍历获取table中每一个tr中的第一个tdjQuery遍历table中间tr td并获得td价值HTML中表格元素TABLE,TR,TD及属性的语法怎么用jquery获取DIV中的TR和TDjquery动态添加/删除 tr/tdxpath & 使用JQuery在TR中查找带有文本的第一个TD上一篇:*在scanf printf中的作用下一篇:printf scanf与指向数组的指针