尝试webscrape数据,但我的for/in循环(使用python)将不会迭代…为什么它不会迭代?

尝试webscrape数据,但我的for/in循环(使用python)将不会迭代…为什么它不会迭代?,python,web-scraping,web-crawler,Python,Web Scraping,Web Crawler,我的for/in循环似乎没有请求每个url的html页面。相反,我的循环只选择最后一个要获取的url 我在互联网上四处寻找,正在使用人们建议的for/in循环,但由于某些原因,它不起作用,我不知道修复方法是什么 #靓汤功能 导入请求 从bs4导入BeautifulSoup #转到的url 基本url=https://www.espn.com/soccer/league/_/name/' url_list=['esp.1'、'ita.1'、'eng.1'] #url循环 对于url_列表中的url

我的for/in循环似乎没有请求每个url的html页面。相反,我的循环只选择最后一个要获取的url

我在互联网上四处寻找,正在使用人们建议的for/in循环,但由于某些原因,它不起作用,我不知道修复方法是什么

#靓汤功能
导入请求
从bs4导入BeautifulSoup
#转到的url
基本url=https://www.espn.com/soccer/league/_/name/'
url_list=['esp.1'、'ita.1'、'eng.1']
#url循环
对于url_列表中的url:
打印(基本url+url)
r=requests.get(基本url+url)
soup=BeautifulSoup(r.text'lxml')
打印(soup.title.string)
#循环浏览排名表并提取数据
预期的结果是for/in循环将转到每个url并回拉html代码,然后我可以执行我的其他代码(循环排名)来回拉每个html页面上的表。但是,for/in循环不会迭代。它只是为最后一个连接的项目回拉html页面,因此是eng.1。我真正不明白的是为什么print(base_url+url)会打印出所有3个连接的url;但是,打印(soup.title.string)仅表示请求了一个url?

请参见下文(工作代码)

输出

https://www.espn.com/soccer/league/_/name/esp.1
Spanish Primera División News, Stats, Scores  - ESPN
https://www.espn.com/soccer/league/_/name/ita.1
Italian Serie A News, Stats, Scores  - ESPN
https://www.espn.com/soccer/league/_/name/eng.1
English Premier League News, Stats, Scores  - ESPN

您可以创建空列表,并可以在for循环中添加所需内容

import requests
from bs4 import BeautifulSoup

#url's to goto
base_url = 'https://www.espn.com/soccer/league/_/name/'
url_list = ['esp.1','ita.1','eng.1']
titles=[]
html_sources = []
#url loop
for url in url_list:
    print(base_url+url)
    r = requests.get(base_url+url)
    soup = BeautifulSoup(r.text, 'lxml')
    titles.append(soup.title.string)
    html_sources.append(soup)
print (titles) #return titles of all 3 sites as a list
print (html_sources)#return html_sources of all 3 sites as a list

您的
打印(soup.title.string)
发生在for循环完成之后。每次获得新url时,变量
soup
都会被覆盖。您需要在for循环之前创建一个空列表,并在for循环内部创建
空列表。append(soup)
。然后您可以处理for循环之外的所有结果,因为它们将包含在列表中。在循环运行之前,您不会执行
打印
,因此您只能看到
soup.title.string
中的最后一个值。将该行缩进,使其与上面的行一致。
import requests
from bs4 import BeautifulSoup

#url's to goto
base_url = 'https://www.espn.com/soccer/league/_/name/'
url_list = ['esp.1','ita.1','eng.1']
titles=[]
html_sources = []
#url loop
for url in url_list:
    print(base_url+url)
    r = requests.get(base_url+url)
    soup = BeautifulSoup(r.text, 'lxml')
    titles.append(soup.title.string)
    html_sources.append(soup)
print (titles) #return titles of all 3 sites as a list
print (html_sources)#return html_sources of all 3 sites as a list