美丽的汤不限制python的结果

时间:2015-07-09 15:11:41

标签: python python-2.7 request beautifulsoup

我正在创建一个脚本来从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中获取内容并向我显示链接。它正在工作并给我链接。但是,它给了我所有的链接。即使我限制了输出,它仍然显示20个链接。为什么会发生这种情况?当我将其写入文件时,它只会在其页面上打印一个链接和最旧的版本。

如何订购结果或将结果限制为1.?

1 个答案:

答案 0 :(得分:1)

它会从每个元素中为您提供一个a代码,因此如果您print(len(x)) limit=1且没有{<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