Python抓取网站链接到列表

时间:2017-07-11 21:08:02

标签: python beautifulsoup screen-scraping jupyter-notebook

我试图抓取http://www.betexplorer.com/soccer/england/premier-league-2016-2017/results/网站链接,然后将链接添加到空列表中。

这是我的代码:

from bs4 import BeautifulSoup
import requests

l = []

r = requests.get("http://www.betexplorer.com/soccer/england/premier-league-2016-2017/results/")
c=r.content
soup=BeautifulSoup(c,"html.parser")
for link in soup.find_all("a",{"class":"in-match"}):
    href=link.get('href')
    l.append(href)
    print(l[0])

现在我的结果是当我试图打印网站的第一个链接时:

/soccer/england/premier-league-2016-2017/arsenal-everton/SGPa5fvr/
/soccer/england/premier-league-2016-2017/arsenal-everton/SGPa5fvr/
/soccer/england/premier-league-2016-2017/arsenal-everton/SGPa5fvr/
/soccer/england/premier-league-2016-2017/arsenal-everton/SGPa5fvr/
.................

问题在于,当我尝试打印出网站的特定链接时,链接会多次打印出来,而且应该只出现一次。

3 个答案:

答案 0 :(得分:1)

print(l[0])循环的每次迭代都会运行for行,并始终打印列表的第一个元素。

for循环结束后,您的列表将包含您要打印的所有链接。此时,您可以遍历列表并打印每个元素。

答案 1 :(得分:1)

更正代码的缩进。

  

print(l [0])在for循环中,这就是为什么它一次又一次地被执行。

from bs4 import BeautifulSoup
import requests

l = []

r = requests.get("http://www.betexplorer.com/soccer/england/premier-league-2016-2017/results/")
c=r.content
soup=BeautifulSoup(c,"html.parser")
for link in soup.find_all("a",{"class":"in-match"}):
    href=link.get('href')
    l.append(href)
print(l[0]) #shift one tab backward

答案 2 :(得分:1)

您犯了一个简单的逻辑错误。您的print语句当前位于循环内。将其从循环范围中取出将解决您的问题。

修正版:

for link in soup.find_all("a",{"class":"in-match"}): 
    href=link.get('href')
    l.append(href)              
print(l[0])

循环执行后,l数组将填充链接