Попытка данных webscrape, но мой цикл for / in (с использованием python) не будет повторяться ... почему он не повторяется? - PullRequest
0 голосов
/ 21 июня 2019

Мой цикл for / in, похоже, не запрашивает html-страницу каждого URL. Вместо этого мой цикл выбирает только последний 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-страницы для последнего объединенного элемента, таким образом, англ. Что я действительно не понимаю, так это то, почему print (base_url + url) распечатает все 3 составных URL; однако print (soup.title.string) указывает только на то, что запрошен один URL-адрес?

Ответы [ 2 ]

0 голосов
/ 21 июня 2019

Вы можете создать пустой список и добавить то, что вы хотите в цикле

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
0 голосов
/ 21 июня 2019

См. Ниже (рабочий код)

# 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
...