Я создал код для веб-страниц некоторых бразильских новостных страниц, но теперь я понял, что, возможно, это излишне долго. Я пытаюсь упростить вещи с помощью для l oop, но я не могу найти те же результаты. Нет необходимости показывать мне новый код, так как я все еще учусь. Но если бы кто-то мог просто дать мне подсказку, я бы оценил это.
Оригинальный код:
#web scraping: Yahoo Finanças
url_yf = "https://br.financas.yahoo.com/"
page_yf = requests.get(url_yf)
page_content_yf = page_yf.content
soup_yf = bs(page_content_yf, "lxml")
news_yf = soup_yf.find_all("h3", {"class" : "Mb(5px)"})
titles_yf = [i.text for i in news_yf]
#web scraping: Estadão
url_est = "https://www.estadao.com.br/ultimas"
page_est = requests.get(url_est)
page_content_est = page_est.content
soup_est = bs(page_content_est, "lxml")
news_est = soup_est.find_all("section", {"class" : "col-md-6 col-sm-6 col-xs-12 col-margin"})
titles_est = [i.text for i in news_est]
#web scraping: Folha de São Paulo
url_fsp = "https://www1.folha.uol.com.br/ultimas-noticias/"
page_fsp = requests.get(url_fsp)
page_content_fsp = page_fsp.content
soup_fsp = bs(page_content_fsp, "html.parser")
news_fsp = soup_fsp.find_all("div", {"class" : "c-headline__content"})
titles_fsp = str([i.text for i in news_fsp]).strip('[]')
titles_fsp_clean = re.sub(r'\\n', ' ', titles_fsp)
#web scraping: Valor Econômico
url_ve = "https://valor.globo.com/ultimas-noticias/"
page_ve = requests.get(url_ve)
page_content_ve = page_ve.content
soup_ve = bs(page_content_ve, "lxml")
news_ve = soup_ve.find_all("div", {"class" : "feed-post-body-title gui-color-primary gui-color-hover"})
titles_ve = [i.text for i in news_ve]
#web scraping: InfoMoney
url_im = "https://www.infomoney.com.br/ultimas-noticias/"
page_im = requests.get(url_im)
page_content_im = page_im.content
soup_im = bs(page_content_im, "lxml")
news_im = soup_im.find_all("span", {"class" : "hl-title hl-title-2"})
titles_im = [i.text for i in news_im]
#cleaning titles
list_of_titles = [titles_yf, titles_est, titles_fsp_clean, titles_ve, titles_im]
titles = [title for title in list_of_titles for title in title]
Тот, над которым я сейчас работаю:
classes = ["h3", {"class" : "Mb(5px)"}, "section", {"class" : "col-md-6 col-sm-6 col-xs-12 col-margin"}, "div", {"class" : "c-headline__content"}, "div", {"class" : "feed-post-body-title gui-color-primary gui-color-hover"}, "span", {"class" : "hl-title hl-title-2"}]
url = {"https://br.financas.yahoo.com/": classes[0], "https://www.estadao.com.br/ultimas": classes[1], "https://www1.folha.uol.com.br/ultimas-noticias/": classes[2], "https://valor.globo.com/ultimas-noticias/": classes[3], "https://www.infomoney.com.br/ultimas-noticias/": classes[4]}
for (key, value) in url.items():
page = requests.get(key)
page_content = page.content
soup = bs(page_content, "html.parser")
news = soup.find_all(value)
titles = [i.text for i in news]
cleaning = str(titles).strip('[]')
cleaning2 = re.sub(r'\\n', ' ', cleaning)
Идея, которую я имею, состоит в том, чтобы попытаться проникнуть внутрь oop словарь (я должен был составить список классов, потому что у меня возникли проблемы с кавычками внутри словаря), чтобы использовать точное значение относительно URL. Я еще совсем нуб в python, но мне это кажется возможным. К сожалению, я не могу найти такие же результаты.