2023年6月29日发(作者:)
python爬⾍语法_python爬⾍:XPath语法和使⽤⽰例python爬⾍:XPath语法和使⽤⽰例XPath(XML Path Language)是⼀门在XML⽂档中查找信息的语⾔,可以⽤来在XML⽂档中对元素和属性进⾏遍历。选取节点XPath使⽤路径表达式来选取XML⽂档中的节点或者节点集。这些路径表达式和我们在常规的电脑⽂件系统中看到的表达式⾮常相似。常⽤路径表达式:表达式描述nodename选取此节点的所有⼦节点。/从根节点选取。//从匹配选择的当前节点选择⽂档中的节点,⽽不考虑它们的位置。.选取当前节点。..选取当前⽗节点。@选取属性。text()选取⽂本内容。实例在下⾯的表格中,列出⼀些路径表达式以及表达式的结果:路径表达式结果bookstore选取bookstore元素/bookstore选取根元素bookstore。注释:假如路径起始于(/),则此路径始终代表到某元素的绝对路径。bookstore/book选取属于bookstore的⼦元素的所有book元素。//book选取所有book⼦元素,⽽不管他们在⽂档中的位置。bookstore//book选择属于bookstore元素的后代的所有book元素,⽽不管它们位于bookstore之下的什么位置。//book/title/@lang选择所有的book下⾯的title中的lang属性的值。//book/title/text()选择所有的book下⾯的title的⽂本。查找特定的节点路径表达式结果//title[@lang]选取所有拥有名为lang的属性的title元素。//title[@lang="eng"]选取lang属性值为eng的所有title元素。/bookstore/book[1]选取属于bookstore⼦元素的第⼀个book元素。/bookstore/book[last()]选取属于bookstore⼦元素的最后⼀个book元素。/bookstore/book[position()>1]选择bookstore下⾯的book元素,从第⼆个开始选择。//book/title[text()='Harry Potter']选择所有book下的title元素,仅仅选择⽂本为Harry Potter的title元素。/bookstore/book[price>35.00]/title选取bookstore元素中的book元素的所有title元素,且其中的price元素的值需⼤于35.00。注意点:在xpath中,第⼀个元素的位置是1,最后⼀个元素的位置是last(),倒数第⼆个是last()-1。选取未知节点XPath通配符可⽤来选取未知的XML元素。通配符描述*匹配任何元素节点。@*匹配任何属性的节点。node()匹配任何类型的节点。实例在下⾯的表格中,列出⼀些路径表达式以及表达式的结果:路径表达式结果//bookstore/*选取bookstore元素的所有⼦元素。//*选取⽂档中的所有元素。//title[@*]选取所有带属性的title元素。选取若⼲路径通过在路径表达式中使⽤"|"运算符,您可以选取若⼲个路径。实例在下⾯的表格中,列出⼀些路径表达式以及表达式的结果:路径表达式结果//book/title | //book/price选取book元素的所有title和price元素。//title | //price选取⽂档中的所有title和price元素。/bookstore/book/title | //price选取属于bookstore元素的book元素的所有title元素,以及⽂档中所有的price元素。使⽤技巧在⼀般的爬⾍实战中,XPath路径可以通过⾕歌浏览器或⽕狐浏览器中复制得到,如下图:但是对于新⼿可以多多尝试⾃⼰写XPath路径,因为有时候复制获取的XPath路径过长,⽽⾃⼰写的更简洁写。例⼦:import requestsfrom lxml import etreeheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143Safari/537.36'}url = '/text/'res = (url, headers=headers)selector = ()id = ('//div[@class="article block untagged mb15 typs_long"]/div[1]/a[2]/h2/text()')print(''.join(id).strip())# 注意:通过/text()可以获取标签中的⽂字信息。# 结果为:璃⽩°⼏种解析⽅式的性能对⽐爬取⽅法性能使⽤难度正则表达式快困难BeautifulSoup慢简单Lxml快简单爬取⾖瓣图书TOP250爬取的例⼦直接输出到屏幕。需求分析:(1)要爬取的内容为⾖瓣图书top250的信息,如下图所⽰:(3)需要爬取的信息有:书名,书本的链接,作者,出版社,出版⽇期评分和评价。具体代码如下:# -*- encoding:utf8 -*-# 爬取⾖瓣图书TOP250。import requestsfrom lxml import etree# 请求头,⽤来模拟浏览器headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143Safari/537.36'}def get_info(url):res = (url, headers=headers).text# lxml库的etree解析htmlselector = (res)# 获取的是⼀页中所有的书本信息,每本的所以信息都在类为item的tr下⾯。infos = ("//tr[@class='item']")for info in infos:# 书名name = ('td/div/a/@title')[0]# 书的链接地址book_url = ('td/div/a/@href')[0]# 获取的是书本的基本信息,有作者和出版社,和出版⽇期...book_infos = ('td/p/text()')[0]# 作者author = book_('/')[0]# 出版社publisher = book_('/')[-3]# 出版⽇期date = book_('/')[-2]# 价格price = book_('/')[-1]# 书本的评分rate = ('td/div/span[2]/text()')[0]# 下⾯的评论comments = ('td/p/span/text()')# 这⾥单⾏的if语句是:如果comments的长度不为0时,则把comments的第1个元素给comment,否则就把"空"赋值给commentcomment = comments[0] if len(comments) != 0 else "空"print(name + " " + book_url + " " + book_infos + " " + author + " " + publisher + " " + date + " " + price + " " + rate + " " +comment)print()# 获取下⼀页的urlif ("//span[@class='next']/a"):next_pag = ("//span[@class='next']/a/@href")get_info(''.join(next_pag))if __name__ == "__main__":url = '/top250'get_info(url)部分结果如下图所⽰:
发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1687984498a63780.html
评论列表(0条)