2023年6月29日发(作者:)
pythonxpath定位嵌套标签_python爬⾍中使⽤Xpath⽅法定位a标签中所有的。。。⽼板扔给了我⼀个陈年语料,让我通过⽂章标题回原⽹址爬取⼀下对应的doi号,⽂章很好定位,但是在解析标题的时候遇到了问题,a标签中混合了i、sub、sup标签,在使⽤xpath时不能直接使⽤text⽅法获取,所以在这⾥记录⼀下⾃⼰的解决⽅案。(想不到,做完这个任务,我顺便学会了希腊字母的读⾳:^)1 xpath定位本篇博客以抓取我的主页中的某条标题为例。⿏标右键要爬的内容,点击“检查”,然后继续右键定位到的内容,选择copy,然后CopyXpath,就可以获得xpath表达式讲真,作为懒⼈,我喜欢这个定位,这样就不⽤像beautifulSoup中那样⼀点点的写定位的元素了。具体操作如下图所⽰。 图1 获取XPath操作获得了XPath路径之后,就可以在直接使⽤lxml包进⾏解析。操作样例如下:import requestsfrom lxml import htmletree = eaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ''Chrome/79.0.3945.130 Safari/537.36','Cookie': '写⾃⼰的',}url = "/qq_33293040" # 我的主页html = (url, headers=headers, timeout=20)xhtml = (("utf-8")) # 解析⽹页node = ('//*[@id="mainBox"]/main/div[2]/div[1]/h4/a') # 填⼊刚才获得的xpathprint(node) # 输出结果:[]2 获取⼦标签——我的⼩技巧1)要爬取的内容。span中的内容+纯⽂本内容,源码形式如下:2)解决代码:def wash(node):res = ''for term in ("./node()[self::text() or self::span]"):# 技巧1:使⽤node()⽅法获取其⼦标签,如我们这⾥是text()⽂本和span标签,# 那么使⽤"./node()[self::text() or self::span]"即可获取;# 如果是i标签就self::i,其他标签就不赘述了。if str(term)[0] != '3)如果我想获取⼦集的⼦集(孙⼦集)的内容呢?解释如下:3 结语因为这次任务,我不再使⽤beautifulSoup,感觉Xpath太适合懒⼈使⽤了。他的优点是可以直接在浏览器中获取他的xpath定位,并且直接复制就好,缺点是在多层嵌套的html下会需要对xpath进⾏修改才能使⽤(⽐如在ul下⼀堆的il标签,返回的结果直接当list使⽤,但是习惯之后我还是觉得很⽅便)。同时,我的任务中涉及⽂本清洗,需要⼤量的替换,为了节省replace的次数,我想了⼀招,和⼤家分享⼀下:def term_replace_set(term):# ⽤于清洗term 减少重复代码⼯作replace_set = [("’", "'"),("‘", "'"),('–', '-'),('α', 'alpha'),('β', 'beta'),('κ', 'kappa'),('ι', 'iota'),('δ', 'delta'),('λ', 'lambda'),('γ', 'gamma'),('η', 'eta'),('≈', 'approximate'),('Å', 'angstrom'),(' ', ' '), # 替换奇怪的空字符]for rule in replace_set:term = e(rule[0], rule[1]) # 循环替代return term(害 写完之后有种⾃⼰是艺术家的错觉,飘了飘了。另外,推荐⼀个学习希腊字母的⽹站,⾼中的时候都没念全,竟现在学会了。)我们学科真是好,只要有电脑,⼲活少不了。告辞~
发布者:admin,转转请注明出处:http://www.yc00.com/news/1687981674a63412.html
评论列表(0条)