python - 尝试 webscrape 数据,但我的 for/in 循环(使用 python)不会迭代......为什么它不迭代?
问题描述
我的 for/in 循环似乎没有请求每个 url 的 html 页面。相反,我的循环只选择最后一个 url 去获取。
我在互联网上环顾四周,正在使用人们建议的 for/in 循环,但由于某种原因它不起作用,我不知道修复是什么。
# Beautiful Soup Functions
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']
#url loop
for url in url_list:
print(base_url+url)
r = requests.get(base_url+url)
soup = BeautifulSoup(r.text, 'lxml')
print(soup.title.string)
#loop through standings table and pull data
预期的结果是 for/in 循环将转到每个 url 并拉回 html 代码,然后我可以执行我的其他代码(循环通过排名)来拉回每个 html 页面上的表格。但是,for/in 循环不会迭代。它只是拉回最后一个连接项目的 html 页面,因此,eng.1。我真的不明白为什么 print (base_url+url) 会打印出所有 3 个连接的 url;但是, print(soup.title.string) 只表示已请求一个 url?
解决方案
见下文(工作代码)
# Beautiful Soup Functions
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']
data = {}
for url in url_list:
print(base_url+url)
r = requests.get(base_url+url)
soup = BeautifulSoup(r.text, 'lxml')
print(soup.title.string)
data[base_url+url] = soup
# now you can work with 'data'
输出
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
推荐阅读
- c++ - C ++无法覆盖基类虚拟方法
- python - 如何在继续之前完成我的 Python 子进程?
- python - 向 Networkx 中的图形节点添加(浮动)坐标 - IndexError
- vb.net - 如何在我的表单后面制作一个窗口的屏幕截图?
- reactjs - 如何在 hoc 中使用最新的路由器 v6 导航
- javascript - 为什么在 Visual Studio 2017 中运行宏会导致调试器崩溃?
- r - 无法复制“使用 R 进行动手编程”示例中的示例
- python - 使用 Numpy linalg.lstsq 求解线性系统时获得(显着)不准确的值
- python - 根据其中一列中的值过滤 DataFrame 中的列
- amazon-web-services - terraform 生成文件,压缩并上传到 s3