好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

python爬虫:使用 BeautifulSoup+正则表达式 提取数据

以酷狗音乐的榜单音乐信息为例,我们要获取源代码中的部分数据:

查看源代码,最后的一部分数据就是我们要获取的数据:

我们可以看到,要获取的数据属于 script 标签中的内容,而且是部分内容,所以这里我们需要先获取指定的script标签中的内容,然后再从其中提取出我们需要的那部分数据,所以在这里我们使用 BeautifulSoup模块 和 正则表达式

首先导入模块

from?bs4?import?BeautifulSoupimport?requestsimport?re

获取网页源代码

url?=?"https://HdhCmsTestkugou测试数据/yy/rank/home/1-23784.html?from=rank"html?=?requests.get(url).text

使用BeautifulSoup模块获取指定标签及内容

soup?=?BeautifulSoup(html,features="lxml")#??获取最后一个?script?标签及其内容script?=?soup.find_all('script')[-1]

进行到这一步我们输出一下获取到的数据

此时获取到的是最后一个script标签中的所有内容,所以我们还需要进一步提取

使用正则表达式提取我们想要的数据

#?查找符合正则表达式的字符串?此时script变量为bs4格式?我们需要将其转化为字符串格式info?=?re.findall(r'\[.*\]',str(script))

再次输出我们获取到的数据

除了我们需要的数据,还有两条符合正则表达式的数据也被提取出来了,所以我们只需要使用列表下标的方式获取我们想要的数据就可以了

#??获取列表中下标为1的数据info?=?re.findall(r'\[.*\]',str(script))[1]

输出看一下

成功提取出我们想要的数据

完整代码

from?bs4?import?BeautifulSoupimport?requestsimport?re

url?=?"https://HdhCmsTestkugou测试数据/yy/rank/home/1-23784.html?from=rank"html?=?requests.get(url).text#?print(html)soup?=?BeautifulSoup(html,features="lxml")#?获取最后一个script元素script?=?soup.find_all('script')[-1]#?print(script)#?print(type(script))#?查找符合正则表达式的字符串?此时script变量为bs4格式?我们需要将其转化为字符串格式info?=?re.findall(r'\[.*\]',str(script))[1]print(info)#?替换符合正则表达式的字符串#?info?=?re.sub(r'\[|\]',"",info)#?print(type(info))#?分割符合正则表达式的字符串#?info?=?re.split(r'\},\{',info)#?print(info)

查看更多关于python爬虫:使用 BeautifulSoup+正则表达式 提取数据的详细内容...

  阅读:39次