美汤不限结果python

Beautiful soup is not limiting the result in python

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

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 获取内容并向我显示 link。它正在工作并给了我 links.But,它给了我所有的 link。即使我限制了输出,它仍然显示 20 links。为什么会这样?当我将它写入文件时,它只打印一个 link 和他们页面上最旧的版本。

如何对结果进行排序或将结果限制为 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 个不带 limit=1 的网址。你的第一个 findAll returns 20 个元素,你遍历每个元素并每次提取 a 标签,这样你就得到了你应该得到的东西。

对于您的文件问题,您在文件中只能看到一个 link,因为您使用 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 得到一个 link 然后使用 find 而不是 findAll,.find 将 return 第一个 .findAll return全部。

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

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