亿万教师在线注册平台讨教2个BeautifulSoup婚配豆瓣top250影戏的优雅完成?

豆瓣top250影戏的链接

<div class="info">
  <div class="hd">
    <a href="https://movie.douban.com/subject/1292052/" class="">
    <span class="title">肖申克的救赎</span>
    <span class="title">&nbsp;/&nbsp;The Shawshank Redemption</span>
    <span class="other">&nbsp;/&nbsp;月黑高飞港  /  安慰1995台</span>
    </a>

</div>

<div class="bd">
  <p class="">
    导演: 弗兰克·德拉邦特 Frank Darabont&nbsp;&nbsp;&nbsp;主演: 蒂姆·罗宾斯 Tim Robbins<br>
    1994&nbsp;/&nbsp;美国&nbsp;/&nbsp;犯罪 剧情
  </p>
</div>

网页的dom普通都因此如许的方式陈列的,想讨教两点:

以影戏名来说,有两个标签的class都是title,我这种原始办法会婚配两个title,有什么办法可以只婚配第一此中文title呢?

titles = soup.find_allname=span, attrs={class: title}

导演和主演栏目<p>标签的class为空,讨教beautifulsoup中有什么办法可以婚配到这个标签内的内容呢?


补充

下面这种完成并不行,由于豆瓣一个页面的话有25个影戏,有40多个如许的title标签,没有50个的缘由是国产影戏没有英文名只要一个title

titles = soup.find_allname=span, attrs={class: title}[0].text

假如它有50个标签还好,我可以经过列表推倒式来打扫偶数的title的标签,但是国产影戏没有英文名,它只会有一个title标签,以是这种完成并不完满。

[title for index, title in enumeratetitles if index % 2 == 0]

看看如许也可以

def get_top250url:
    html = requests.geturl.content
    soup = BeautifulSouphtml, lxml
    soup = soup.findol, class_="grid_view"
    for titles in soup.find_allli:
        """ 这里运用find就可以完成只获取一个title的服从 """
        printtitles.findspan, class_="title".text
        # 获取导演和主演信息
        printtitles.finddiv, class_="bd".findp.text.strip.replace\n, 
        
        

1:直接下标取值就可以吧

titles = soup.find_allname=span, attrs={class: title}[0].text
  1. 假如<div class=”bd”>里面没有别的p的话,直接在div找p就可以了吧:

content = soup.finddiv,attrs={class:bd}.findp.text

重新答复吧:

import requests
from bs4 import BeautifulSoup as BS

soup = BSrequests.gethttps://movie.douban.com/top250.text

ol = soup.findol, attrs={"class":grid_view} # 找到包括影戏的ol
lis = ol.find_allli # 找到统统的影戏li

for movie in lis:
    ###
    # 处理每个影戏,就跟下面一样了
    ###

(看完/读完)这篇文章有何感想! 亿万先生在线注册平台的分享…

发表评论

姓名 *
电子邮件 *
站点