python 爬虫 --字符编写问题

版权声明:zhiyu https://blog.csdn.net/ichglauben/article/details/82460546

python爬虫后出现字符串问题

测试用例:

[root@izwz9eitqs320brxl6owssz ~]# python
Python 2.7.5 (default, Nov  6 2016, 00:28:07) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 
>>> import re
>>> html = '''<div id="songs-list">
... <h2 class="title">经典老歌</h2>
... <p class="introduction">
...  经典老歌列表
... </p>
... <ul id="list" class="list-group">
... <li data-view="2">一路上有你</li>
... <li data-view="7">
... <a href="/2.mp3" singer="任贤齐">沧海一声笑</a>
... </li>
... <li data-view="4" class="active">
... <a href="/3.mp3" singer="齐秦">往事随风</a>
... </li>
... <li data-view="6"><a href="/4.mp3" singer="beyond">=光辉岁月</a></li>
... <li data-view="5"><a href="/5.mp3" singer="陈慧琳">记事本</a>
... </li>
... <li data-view="5">
... <a href="/6.mp3" singer="邓丽君">但愿人长久</a>
... </li>
... </ul>
... </div>'''
  • 正则表达式
>>> res = re.search('<li.*?active.*?singer="(.*?)">(.*?)</a>',html,re.S)
>>> res.group()
'<li data-view="2">\xe4\xb8\x80\xe8\xb7\xaf\xe4\xb8\x8a\xe6\x9c\x89\xe4\xbd\xa0</li>\n<li data-view="7">\n<a href="/2.mp3" 
singer="\xe4\xbb\xbb\xe8\xb4\xa4\xe9\xbd\x90">\xe6\xb2\xa7\xe6\xb5\xb7\xe4\xb8\x80\xe5\xa3\xb0\xe7\xac\x91</a>\n</li>\n<li data-view="4" 
class="active">\n<a href="/3.mp3" 
singer="\xe9\xbd\x90\xe7\xa7\xa6">\xe5\xbe\x80\xe4\xba\x8b\xe9\x9a\x8f\xe9\xa3\x8e</a>'

出现以上字符串问题
解决方法:
- 1.type()看类型

>>> type(res.group())
<type 'str'>
  • 2.
>>> print str(res.group()).decode("string_escape")
<li data-view="2">一路上有你</li>
<li data-view="7">
<a href="/2.mp3" singer="任贤齐">沧海一声笑</a>
</li>
<li data-view="4" class="active">
<a href="/3.mp3" singer="齐秦">往事随风</a>
>>> print str(res.group(1)).decode("string_escape")
齐秦
>>> print str(res.group(2)).decode("string_escape")
往事随风

测试2 找出所有的对应的歌手歌曲(findall)

>>> res = re.findall('<li.*?singer="(.*?)">(.*?)</a>',html,re.S)
>>> res
[('\xe4\xbb\xbb\xe8\xb4\xa4\xe9\xbd\x90', '\xe6\xb2\xa7\xe6\xb5\xb7\xe4\xb8\x80\xe5\xa3\xb0\xe7\xac\x91'), ('\xe9\xbd\x90\xe7\xa7\xa6', '\xe5\xbe\x80\xe4\xba\x8b\xe9\x9a\x8f\xe9\xa3\x8e'), ('beyond', '=\xe5\x85\x89\xe8\xbe\x89\xe5\xb2\x81\xe6\x9c\x88'), ('\xe9\x99\x88\xe6\x85\xa7\xe7\x90\xb3', '\xe8\xae\xb0\xe4\xba\x8b\xe6\x9c\xac'), ('\xe9\x82\x93\xe4\xb8\xbd\xe5\x90\x9b', '\xe4\xbd\x86\xe6\x84\xbf\xe4\xba\xba\xe9\x95\xbf\xe4\xb9\x85')]
>>> print str(res).decode("string_escape")
[('任贤齐', '沧海一声笑'), ('齐秦', '往事随风'), ('beyond', '=光辉岁月'), ('陈慧琳', '记事本'), ('邓丽君', '但愿人长久')]
>>> for i in res:
...   print str(i).decode('string_escape')
... 
('任贤齐', '沧海一声笑')
('齐秦', '往事随风')
('beyond', '=光辉岁月')
('陈慧琳', '记事本')
('邓丽君', '但愿人长久')

猜你喜欢

转载自blog.csdn.net/ichglauben/article/details/82460546