携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第5天,点击查看活动详情
前文回顾
一名前端工作人员的python爬虫实践记录【1】——通过urllib封装请求
一名前端工作人员的python爬虫实践记录【2】---BeautifulSoup
一名前端工作人员的python爬虫实践记录【3】--用正则表达式匹配html文档【上】
书接上文
在上一篇的文章里,我们已经实现了根据html里的titles类获取对应的电影片名,但是随即而来的是另一个难题,那就是有一些像霸王别姬这类的电影,只有一个中文名字。而titles的返回的是一个或者两个电影名字,那这时候数据要怎么处理呢?
补充: 数据格式思路
在这个爬取的过程中,我们需要创建一个datalist的数组,用作存取整个网页的所有需要爬取的数据
如图,然后在每一个循环里,定义一个data的空数组,依次将爬取电影的中文片名,英文片名,图片链接,评价,简介,其他信息等数据append到data里面
然后data添加到datalist里面去。
titles 的处理
这里我的想法很简单,就是根据返回数组的长度去分别适配中文电影名和英文电影名 这里单独创建了一个etitles的数组用作存储英文名
titles = re.findall(findtitles, item)
length = len(titles)
ctitle = titles[0]
data.append(ctitle)
if length > 1:
etitles.append(titles[1])
data.append(titles[1])
else:
etitles.append("无")
data.append("无")
这时候再看看etitles输出:
/ The Shawshank Redemption
无
/ Forrest Gump
/ Titanic
/ Léon
/ La vita è bella
/ 千と千尋の神隠し
...
这时候可以发现,我们匹配到的字符串在输出上还存在着小问题。
在这个英文名的前面有一个可恶的斜杠,看着很突兀。
那么应该怎么去解决这个问题呢?
这时候就得使用python里的替换方法replace了:
data.append(others.replace("\xa0/\xa0", ""))
其他信息的正则表达式写法
抛转引玉,其他的正则表达式匹配如下
findlink = re.compile(r'href="(.*)"') # 电影链接
findimgSrc = re.compile(r'src="(.*)"\s') # 图片链接
findtitles = re.compile(r'"title">(.*?)<') # 片名
findothers = re.compile(r'other">(.*)<') # 其他译名
findinq = re.compile(r"class=\"inq\">(.*?)<") # 一句话评价
findAvg = re.compile(r"v:average\">(.*)<") # 平均分
findrating = re.compile(r"span>(\d*)人评价<\/span>") # 打分
写到这里,相信你长出一口气,已经觉得这已经大功告成了吧。
但是新的问题又来了,出现了新的问题。
请见下文:
<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='bd'的那一块了吗?那一块代表着电影的详细信息
它是长这样的:<div class="bd">
<p class="">
导演: 弗兰克·德拉邦特 Frank Darabont 主演: 蒂姆·罗宾斯 Tim Robbins /...<br>
1994 / 美国 / 犯罪 剧情
</p>
Holy shit!! 这中间又有<br> 又有 的 这怎么玩?
相信你看到这就骂娘了,直娘贼,作者你是不是又要吊我们的胃口,等到明天再更新怎么处理这种案例了?
对对对对对
下期预告
python正则表达式匹配html文档的收尾工作。
我是短袖撸码蒂尔尼
一名热爱阿森纳的前端工程师
如果本文对您有帮助,可以给一个免费的赞吗?谢谢!