Я хочу найти все гиперссылки, текстовое имя которых включает «статью» в https://www.geeksforgeeks.org/ например, внизу этой веб-страницы
Write an Article
Improve an Article
Я хочу получить все гиперссылки и распечатать их, поэтому я попытался,
from urllib.request import urlopen
from bs4 import BeautifulSoup
import os
import re
url = 'https://www.geeksforgeeks.org/'
reqs = requests.get(url)
soup = BeautifulSoup(reqs.text, "html.parser")
links = []
for link in soup.findAll('a',href = True):
#print(link.get("href")
if re.search('/article$', href):
links.append(link.get("href"))
Однако в результате получается [] , как это решить?
@3dSpatialUser, проверьте еще раз, пожалуйста
Я голосую за то, чтобы закрыть этот вопрос, потому что предоставленный код не приводит к вашей проблеме с пустым ResultSet
, есть несколько других проблем (модуль, переменные) - Просто подсказка: если вы хотите найти статью в тексте, почему вы ищете в href ?
@HedgeHog название гиперссылки - «статья» на веб-сайте.
Вот что вы можете попробовать:
Обратите внимание, что в приведенной вами ссылке больше ссылок с тестом article
, но это дает представление о том, как с этим бороться.
В данном случае я просто проверил, есть ли слово article
в тексте этого тега. Вы можете использовать поиск по регулярным выражениям, но для этого примера это излишество.
import requests
from bs4 import BeautifulSoup
url = 'https://www.geeksforgeeks.org/'
res = requests.get(url)
if res.status_code != 200:
'no resquest'
soup = BeautifulSoup(res.content, "html.parser")
links_with_article = soup.findAll(lambda tag:tag.name= = "a" and "article" in tag.text.lower())
Обновлено:
Если вы знаете, что в href, т.е. в самой ссылке, есть слово:
soup.select("a[href*=article]")
это будет искать слово article
в href
всех элементов a
.
Обновлено: получить только href:
hrefs = [link.get('href') for link in links_with_article]
Большое спасибо, это то, что я хочу, но он возвращает всю информацию, как я могу получить только рекламу?
пожалуйста, посмотрите мое редактирование
Большое спасибо, у меня все еще есть небольшой вопрос, как я могу использовать регулярное выражение, чтобы переписать его? Я имею в виду, например, "4article", "5article"... Я пишу re.match ("/darticle$", tag.text.lower()), почему не верно?
Ваш /d
должен быть \d
. Например, вы можете использовать: links_with_article = soup.findAll(lambda tag:tag.name= = "a" and re.search(r'\darticle', tag.text.lower()))
, чтобы найти статью. Я использовал поиск для поиска по всей строке, совпадение искалось только с начала строки.
Спасибо за вашу помощь еще раз, и я действительно ценю это!
Привет, у вас есть часть вашего html, чтобы мы могли воспроизвести ваш код? Это упростит отладку и поможет вам с вашим вопросом.