解决:
xpath
取出指定多标签内所有文字
text
2016/11/14 0
Python 2.7 Pycharm 5.0.3
问题
再写一个
markdown
自动引用的小脚本的时候新出现的问题,也就是利用
xpath
取出字符串的问题,记录一下
取出如下字符串
我要取出
mrlevo520
的内容,怎么取呢,很多方法,
bs4
也可以,正则也可以,动
态
selenium
也可以,这次我想尝试用
xpath
来做,一则是为了和
selenium
接轨,
xpath
的确很强大,二来是
firefox
提供
firebug
插件,可以直接定位你需要内容的标
签,一步到位简直完美,不多说,上程序。
import
urllib2from
lxml
import
etreecrawl_url
=
“jianshu/p/e2c4ebd2eeb3”req
=
urllib2.Request(crawl_url)req.add_header(‘User-Agent’,’Mozilla/5.0
(Windows
NT
10.0;
WOW64)
AppleWebKit/537.36
(KHTML,
like
Gecko)
Chrome/45.0.2454.101
Safari/537.36’)response
=
urllib2.urlopen(req)html
=
response.read()selector
=
etree.HTML(html)#
核心部分
bloger
=
selector.xpath(“//a[@
]”)info
=
bloger[0].xpath(‘string(.)’).encode(‘utf-8’).strip()print info #
打印出
mrlevo
网上的方法
ok
,我们来试下,用小哥改进的方法取出上面那个标签
#
修改
-
核心部分,其余保持一样
bloger
=
selector.xpath(“//a[@
bloger[0].xpath(‘string(.)’).extract()[0]ok
,又报错了
AttributeError: ‘_ElementStringResult’ object has no attribute ‘extract’
查看类型,如小
哥所说,的确是
list
,再查看列表
type(bloger)
#
listprint
type(bloger[0])
#’lxml.etree._Element’print
(bloger[0])
#
Element
a
at
0x36e9208
#
ok
,这要取出
bloger[0]
里面的字符串就可以了再次修改代
码,去掉
extract()
,并去掉周围空格
#
核心部分
bloger
=
selector.xpath(“//a[@
bloger[0].xpath(‘string(.)’).strip()#
ok
,取值成功
对于小哥的例子,取出来之后字符串片段使用连接字符串
(join)
就可
以了
(
可能都不需要
join
,我没试过
)