关于BeautifulSoup 和 re 的探讨

个人觉得使用BeautifulSoup匹配网页标签内容比re更容易一些,re的规则比较多而且有些使用方法比较难,很容易匹配不到

而soup方法在处理网页标签就特别容易,这和urllib.request.urlopen()和request.get()一样,后者要容易一些:

1.re 正则表达式

编译模式:这个匹配模式多次被使用

content = 'who is xxoo.jpg, maybe shanpao is xxoo.jpg '

reg = re.compile(r'xxoo\.jpg')

p = re.search(reg, content)#search只匹配最前匹配的那个 match则是匹配开头,findall匹配全部返回一个列表

print(p.group())#取得匹配对象

>>>xxoo.jpg

非编译模式:直接写在括号里

content = 'who is xxoo.jpg, maybe shanpao is xxoo.jpg '

p = re.search(r'xxoo\.jpg', content)#search只匹配最前匹配的那个 match则是匹配开头,findall匹配全部返回一个列表,带括号的匹配括号里面的

print(p.group())#取得匹配对象

>>>xxoo.jpg

2.soup模式

html ='''
<body>
<div class = 'heiheihaha'>

<img id = 'xx' src = 'www.xxoo.jpg' />

<a href = 'www.xxoo.com'>18岁以下禁止入内</a>

</div>
</body>
'''

soup = BeautifulSoup (html, 'lxml')
div_text = soup.select('.heiheihaha')#class 用点号.代替 如果是id则用#号代替
print(div_text) #输出div下面的所有标签内容

>>>

[<div class="heiheihaha">
<img id="xx" src="www.xxoo.jpg"/>
<a href="www.xxoo.com">18岁以下禁止入内</a>
</div>]

img_text = soup.select('.heiheihaha img') #输出div下的img里面的吗的内容,列表形式

print(img_text)

>>>

[<img id="xx" src="www.xxoo.jpg"/>]

img_text = soup.select('.heiheihaha img')

print(img_text[0]['src']) #解析列表获取里面的src的值。一般为图片路径

>>>www.xxoo.jpg

a_text = soup.select('.heiheihaha a') #获取 div下的a标签

print(a_text)

>>>[<a href="www.xxoo.com">18岁以下禁止入内</a>] 

a_text = soup.select('.heiheihaha a')

print(a_text[0].text) #获取啊标签下的值

>>>18岁以下禁止入内

a_text = soup.select('.heiheihaha a')

print(a_text[0]['href']) #获取啊标签的链接

>>>www.xxoo.com





posted @ 2018-01-27 00:20  pyming  阅读(502)  评论(0编辑  收藏  举报