携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第4天,点击查看活动详情
前文回顾
一名前端工作人员的python爬虫实践记录【1】——通过urllib封装请求
一名前端工作人员的python爬虫实践记录【2】---BeautifulSoup
书接上文
上一篇文章了,我们已经成功对浏览器封装了请求,认识了BeautifulSoup 。
但是问题也来了:
在数据渲染中,只要我们定位到class='item' 我们便可以获取到具体的电影信息,那为了配合BeautifulSoup的使用,咱们得使用一种常见的方法去匹配对应的代码段,那就是怎样的方法,能够在这茫茫多的代码之中,如狡兔一般迅捷,如猎鹰一般精准地锁定目标,成功匹配呢?
没错,这就是我们今天的主角,正则表达式。
正则表达式
什么是正则表达式?
正则表达式是用于匹配字符串中字符组合的模式。在编程开发里,正则表达式常常用作匹配特定规则的字符串,例如电话号码,身份证号码,特定规则下的id等等。
我该怎么练习正则表达式呢?
-
多练习 俗话说的好,熟能生巧,无论是巧手还是俗手,都离不开平时本手的积累。 这里是两个很不错的练习正则表达式的网站
这个支持在线文本检测
这个支持多语言切换 -
如果平时很少有练习的机会的话,可以尝试把常用的正则表达式规则打印下来,贴在键盘垫上,随用随查!
那怎么将正则表达式和Beautiful Soup结合呢?
还是以豆瓣电影top250为例:
由此可见,每部电影都是在一个class='item' 的li标签里渲染的。
<li>
<div class="item">
<div class="pic">
<em class="">1</em>
<a href="https://movie.douban.com/subject/1292052/">
<img width="100" alt="肖申克的救赎" src="https://img2.doubanio.com/view/photo/s_ratio_poster/public/p480747492.jpg" class="">
</a>
</div>
<div class="info">
<div class="hd">
<a href="https://movie.douban.com/subject/1292052/" class="">
<span class="title">肖申克的救赎</span>
<span class="title"> / The Shawshank Redemption</span>
<span class="other"> / 月黑高飞(港) / 刺激1995(台)</span>
</a>
<span class="playable">[可播放]</span>
</div>
<div class="bd">
<p class="">
导演: 弗兰克·德拉邦特 Frank Darabont 主演: 蒂姆·罗宾斯 Tim Robbins /...<br>
1994 / 美国 / 犯罪 剧情
</p>
<div class="star">
<span class="rating5-t"></span>
<span class="rating_num" property="v:average">9.7</span>
<span property="v:best" content="10.0"></span>
<span>2664126人评价</span>
</div>
<p class="quote">
<span class="inq">希望让人自由。</span>
</p>
</div>
</div>
</div>
</li>
示例
以获取第一名的肖申克的救赎的片名为例:
第一步:创建正则表达式匹配式: 由观察可知,片名信息是在class:'title'下:
<span class="title">肖申克的救赎</span>
<span class="title"> / The Shawshank Redemption</span>
因此创建正则表达式:
findtitles = re.compile(r'"title">(.*?)<')
第二步:循环
由于我们的html里,一页就有25个item,因此我们需要一个循环,这里要用到BeautifulSoup里面的find_all方法
for item in bs.find_all("div", attrs={"class": "item"}):
第三步:在item里面查找片名
通过正则里面的findall 获取片名titles
titles = re.findall(findtitles, item)
还有问题...?
titles的输出如下:
肖申克的救赎
/ The Shawshank Redemption
由此可见,在html里面 中文名和英文名都是在title下,而有的电影,如霸王别姬,是没有英文名的,那怎么办呢?
容我暂时卖个关子,下期为您娓娓道来。
下期预告
- 片名匹配的细化处理
- 其他信息的匹配处理
- 爬取数据后的格式处理问题
我是短袖撸码蒂尔尼
一名热爱阿森纳的前端工程师
如果本文对您有帮助,可以给一个免费的赞吗?谢谢!