【问题标题】:Print all elements in <li> - BeautifulSoup打印 <li> 中的所有元素 - BeautifulSoup
【发布时间】:2014-11-09 09:51:02
【问题描述】:

我正在使用PythonBeautifulSoup 进行网络抓取。

我需要刮掉这个

<li class="review-rating">
   <h5 class="review-rating__title">Location:</h5>
   <span class="review-rating__score">5</span>
   <h5 class="review-rating__title">Value:</h5>
   <span class="review-rating__score">3</span>
   <h5 class="review-rating__title">Facilities:</h5>
   <span class="review-rating__score">4</span>
   <h5 class="review-rating__title">Service:</h5>
   <span class="review-rating__score">4</span>
   <h5 class="review-rating__title">Cleanliness:</h5>
   <span class="review-rating__score">5</span>
</li>

我实际上已经用这段代码刮掉了这个标记

for scores_of_this_customer in tt.select('li.review-rating'):
   print(scores_of_this_customer.select('h5.review-rating__title')[0].text +" "+scores_of_this_customer.select('span.review-rating__score')[0].text)

但这只会打印Location: 5

我想要一种使用循环打印所有这些分数的方法。

我知道我可以通过将它们索引为 [1][2]... 等来打印其他分数,但我不想写 5 个打印语句

PS:

这段代码对我有用。

if tt.select('li.review-rating'):
      soup = tt.select('li.review-rating').find("li", {"class", "review-rating"})
      keys = soup.findAll("h5", {"class" : "review-rating__title"})
      values = soup.findAll("span", {"class" : "review-rating__score"})
      for key, value in zip(keys, values):
       print(key.text + ": " + value.text)

【问题讨论】:

    标签: python python-3.x beautifulsoup


    【解决方案1】:

    我相信可以直接访问它们。试试这个:

    import urllib
    import bs4
    url = "http://yourURL.com"
    html = urllib.urlopen(url).read()
    soup = bs4.BeautifulSoup(html)
    

    如果你真的只需要这个&lt;li class="review-rating"&gt;结果,你可以把下面的部分去掉注释:

    # soup = soup.find("li", {"class", "review-rating"})
    

    那么下一部分应该很好地遍历所有键/值组合:

    keys = soup.findAll("h5", {"class" : "review-rating__title"})
    values = soup.findAll("span", {"class" : "review-rating__score"})
    for key, value in zip(keys, values):
        print(key.text + ": " + value.text)
    

    此代码适用于 OP:

    if tt.select('li.review-rating'):
          soup = tt.select('li.review-rating').find("li", {"class", "review-rating"})
          keys = soup.findAll("h5", {"class" : "review-rating__title"})
          values = soup.findAll("span", {"class" : "review-rating__score"})
          for key, value in zip(keys, values):
           print(key.text + ": " + value.text)
    

    【讨论】:

    • 我很好奇。有没有办法查看你正在抓取的 URL?这是一种猜测。
    • 我已经编辑了你的答案并添加了对我有用的代码
    猜你喜欢
    • 2019-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    • 2020-09-09
    • 1970-01-01
    • 2021-03-10
    相关资源
    最近更新 更多