python 爬蟲 解析/正则匹配/乱码问题整理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 爬蟲 解析/正则匹配/乱码问题整理相关的知识,希望对你有一定的参考价值。

今日爬取一听/扬天音乐都遇到了某些问题,现在对爬取过程中遇到的问题,做对于自己而言较为系统的补充与解释。主要问题有一下几点:

一:beautiful,urllib等库进行网页解析时,对于目标下的东西无法进行解析与显示

二:正则匹配虽然看过许多,但实际使用时仍然不够熟练,需要大量参考,故而,打算重新整理

三:对于乱码问题,曾在建mysql数据库时,头疼多次,现打算对于网页解析的乱码处理方法做些整理

 

这次目标是爬取扬天音乐“http://up.mcyt.net/”,需要获取的内容有:歌曲名,歌手以及打开浏览器即可播放的音乐链接(格式大致:http://up.mcyt.net/md5/53/******.mp3)

这个任务相对简单,至少在爬虫道路上遇到了又一新情形,故在此稍加叙述。

现在需要爬取截图中的音乐外接,如下图,以及与之对应的web元素

技术分享

<label>

  <span>音乐外链:</span>

  <input type="text"  name="name"  value="http://up.mcyt.net/md5/53/MTcwMzYwMg_Qq4329912.mp3">

  <br>

  <span>a网页代码:</span>

  <input type="text"  name="name"  onlick="select();"  value="<object height="0" width="0" data="http://up.mcyt.net/p/37823.html"></object>">

<label>

 

一开始使用的是常规的BeautifulSoup框架进行解析:

response = urlopen(url)

bsObj = BeautifulSoup(response, "html.parser")

li=bsObj.findAll("input",{"type":"text" ,"name":"name"})li=bsObj.findAll("input", {"type": "text" })

print li

但是返回的结果,无法通过li.attrs[‘value‘]获取需求的字符串。原因:以上思路对应的网站元素的格式是 

<a  "attr1"=“xxx"  “attr2”="xxx"  "attr3"="xxxx">text</a>

解决方法:

首先解析到<input  "attr1"="xxx"  "attr2"="xxx">的上一层的target,然后再采用正则的方法获取对应的attrs,

def getInfo(html):

  reg=r‘value="(.+?.mp3)" ‘    #传说中的 pattern

  mp3=re.compile(reg)

  mp3list=re.findall(mp3,html)

  return mp3list

 

现在进入第二部分的整理:正则匹配。

1.Python支持的正则表达式元字符和语法

技术分享

 

 

 

2.re模块:使用re的一般步骤是先将正则表达式的字符串形式编译为Pattern实例,然后使用Pattern实例处理文本并获得匹配结果(一个Match实例),最后使用Match实例获得信息,进行其他的操作。

import re
# 将正则表达式编译成Pattern对象
pattern = re.compile(r‘hello‘)
# 使用Pattern匹配文本,获得匹配结果,无法匹配时将返回None
match = pattern.match(‘hello world!‘)
if match:
    # 使用Match获得分组信息
    print match.group()
### 输出 ###
# hello

3.本次使用以上 详细的正则可参考:http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html#top 和 相关的拓展:www.cnblogs.com/animalize/p/4949219.html

 

以上是关于python 爬蟲 解析/正则匹配/乱码问题整理的主要内容,如果未能解决你的问题,请参考以下文章

01_Python爬蟲入門遇到的坑__反爬蟲策略01

Python中正则表达式的使用

正则表达式替换文本用以整理文章

Python解析器层匹配错误的正则表达式

正则表达式整理

Python正则表达式解析流