美汤不限结果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
,页面上的第一个结果。
我正在创建一个脚本来从 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
,页面上的第一个结果。