【问题标题】:Beautiful soup is not limiting the result in python美丽的汤不限制python中的结果
【发布时间】:2015-07-09 15:11:40
【问题描述】:

我正在创建一个脚本来获取来自 funanimation 的新剧集。所以,我写了这个简单的脚本。

import requests
from bs4 import BeautifulSoup
import subprocess     



r = requests.get('http://www.funimation.com/videos/episodes')
soup = BeautifulSoup(r.text)
print soup.title
subtitles = soup.findAll('div',{'class':'item-resume-info clearfix'})
for show in subtitles:
  x = show.find_all('a', limit=1)
  for a in x:
   url = a['href']
   file = open("LatestLink.txt", "w")
   file.write(url)
   file.close()

如您所见,它从 hompage 获取内容并向我显示链接。它正在工作并给我链接。但是,它给了我所有的链接。即使我限制了输出,它仍然显示 20 个链接。为什么会发生这种情况?当我将其写入文件时,它只会打印一个链接以及他们页面上最旧版本的链接。

我如何对结果进行排序或将它们限制为 1.?

【问题讨论】:

    标签: python python-2.7 request beautifulsoup


    【解决方案1】:

    它会从每个元素中为您提供一个 a 标签,因此您不会得到所有标签,如果您在 print(len(x))limit=1 和没有时可以看到:

    In [29]: for show in subtitles:
       ....:       x = show.find_all('a',limit=1)
       ....:       print(len(x))
       ....:     
    1
    1
    1
    1
    1
    1
    .............
    
    In [30]: for show in subtitles:
          x = show.find_all('a')
          print(len(x))
       ....:     
    2
    2
    2
    2
    2
    2
    2
    2
    ..................
    

    如果您在循环中添加计数和增量,您还可以验证您获得了 20 个带有 limit=1 的网址和 40 个没有的网址。您的第一个 findAll 返回 20 个元素,您遍历每个元素并每次提取 a 标记,这样您就得到了应该得到的东西。

    对于您的文件问题,您只能在文件中看到一个链接,因为您使用w 保持覆盖,在循环之外打开文件:

    with  open("LatestLink.txt", "w") as f:
        for show in subtitles:
            x = show.find_all('a', limit=1)
            for a in x:
                url = a['href']
                f.write(url)
    

    如果您实际上只希望第一个 item-resume-info clearfix 获取单个链接,则使用 find 而不是 findAll,.find 将返回第一个 .findAll 返回全部。

    subtitles = soup.find('div', {'class': 'item-resume-info clearfix'})
    with  open("LatestLink.txt", "w") as f:
            url = subtitles.a["href"]
            f.write(url)
    

    返回页面上的第一个结果http://www.funimation.com/shows/chaos-dragon/videos/official/antinomy

    【讨论】:

    • 问题是我只想要这 20 个 URL 中的一个 URL……顶部的那个……我是 python 的初学者……所以,请放轻松有点……
    • 那么你应该使用 find subtitles = soup.find('div', {'class': 'item-resume-info clearfix'}) url = subtitles.a["href"]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-30
    相关资源
    最近更新 更多