java tr td br_xpath & <tr><td><br>

python : 3.6

lxml : 4.2.1

from lxml.html importetree

test_html= '''

12
3
4
1.12.1
3.1
4.1

'''

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 intag3]

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]--> 1tag2-[0]--> 2tag2-[1]--> 2.1tag3--> ['2', '3', '4', '2.1', '3.1', '4.1']

tag3-str--> 2342.13.14.1tag2--> [, ]

tag2[0]-string--> 234tag2[1]-string--> 2.13.14.1

代码在上面。

简单说一说:

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

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

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

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

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

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

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标签的信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值