b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

正则表达式语法/ Python爬虫:现学现用Xpath爬取豆瓣音乐

电脑杂谈  发布时间:2018-02-09 00:49:40  来源:网络整理

正则表达式的\\_正则表达式语法/_正则表达式是什么

正则表达式语法/

爬虫的抓取方式有好几种,正则表达式,Lxml(xpath)与Beautiful,我在网上查了一下资料,了解到三者之间的使用难度与性能

三种爬虫方式的对比。

抓取方式性能使用难度

这样一比较我我选择了Lxml(xpath)的方式了,虽然有三种方式,但肯定是要选择最好的方式来爬虫,这个道理大家都懂,另外有兴趣的朋友也可以去了解另外两种爬虫方式!

好了现在来讲讲xpath

由于Xpath属于lxml模块,所以首先需要安装lxml库,老办法直接在file-->setting---project interpreter 一键添加lxml库。

from lxml import etree

s=etree.HTML(源码) #将源码转化为能被XPath匹配的格式

s.xpath(xpath表达式) #返回为一列表,

// 双斜杠 定位根节点,会对全文进行扫描,在文档中选取所有符合条件的内容,以列表的形式返回。

/ 单斜杠 寻找当前标签路径的下一层路径标签或者对当前路标签内容进行操作

/text() 获取当前路径下的文本内容

/@xxxx 提取当前路径下标签的属性值

| 可选符 使用|可选取若干个路径 如//p | //div 即在当前路径下选取所有符合条件的p标签和div标签。

. 点 用来选取当前节点

.. 双点 选取当前节点的父节点

学以致用,方能让我们能快速掌握xpath语法功能。

我们这次需要爬取豆瓣音乐前250条

打开豆瓣音乐:https://music.douban.com/top250

右键弹出菜单栏 Copy==> Copy Xpath

这里我们想获取音乐标题,音乐标题的xpath是:xpath://*[@id="content"]/div/div[1]/div/table[1]/tbody/tr/td[2]/div/a


# coding:utf-8
from lxml import etree
import requests

url = 'https://music.douban.com/top250'

html = requests.get(url).text
s = etree.HTML(html)
title = s.xpath('//*[@id="content"]/div/div[1]/div/table[1]/tbody/tr/td[2]/div/a')
print title

运行代码:

居然是空的。!!!

这里需要注意一下,浏览器复制的xpath只能作参考,因为浏览器经常会在自己里面增加多余的tbody标签,我们需要手动把这个标签删除

删除中间的/tbody后,是这样的,

title = s.xpath('//*[@id="content"]/div/div[1]/div/table[1]/tr/td[2]/div/a')

然后我们再运行代码。

得到:

<Element a at 0x53d26c8>

说明标题被获取到了。

正则表达式的\\_正则表达式语法/_正则表达式是什么

因为要获取标题文本,所以xpath表达式要追加/text()

title = s.xpath('//*[@id="content"]/div/div[1]/div/table[1]/tr/td[2]/div/a/text()')#因为要获取标题,所以我需要这个当前路径下的文本,所以使用/text()

又因为这个s.xpath返回的是一个集合,且集合中只有一个元素所以我再追加一个[0]

新的表达式:

title = s.xpath('//*[@id="content"]/div/div[1]/div/table[1]/tr/td[2]/div/a/text()')[0]#因为要获取标题,所以我需要这个当前路径下的文本,所以使用/text(),再追加[0]


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-67890-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...