我正在创建一个脚本来从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.?
答案 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
。