Я хочу получить URL, а не True или False в моем коде - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь получить список URL, а не True из False ответа в конце оператора.

#!/usr/bin/env python

import requests
from BeautifulSoup import BeautifulSoup

url ="https://www.geant.tn/"
response = requests.get(url)
# parse html
page = str(BeautifulSoup(response.content))

def getURL(page):

Нет проблем для этой части

    """
    :param page: html of web page (here: Python home page)
    :return: urls in that page
    """
    start_link = page.find("a href")
    if start_link == -1:
        return None, 0
    start_quote = page.find('"', start_link)
    end_quote = page.find('"', start_quote + 1)
    url = page[start_quote + 1: end_quote]
    return url, end_quote

while True:
    url, n = getURL(page)
    page = page[n:]

У меня возникла проблема, так как у меня отображается True или False:

if url.endswith('.html'):
    print url
else:
    break

Если вы можете мне помочь, большое спасибо!

1 Ответ

0 голосов
/ 01 февраля 2019

Если вы хотите получить все URL-адреса на этой странице, которые заканчиваются на .html, тогда проще всего использовать функцию find_all() в BeautifulSoup, чтобы вернуть все теги a, которые содержат href атрибуты.Затем вы можете использовать понимание списка для создания вашего списка, включая только те, которые заканчиваются на .html.Например:

import requests
from bs4 import BeautifulSoup

url = "https://www.geant.tn/"
response = requests.get(url)
# parse html
soup = BeautifulSoup(response.content, "html.parser")

def getURLs(soup):
    return [a_tag['href'] for a_tag in soup.find_all('a', href=True) if a_tag['href'].endswith('.html')]

urls = getURLs(soup)

for url in urls:
    print url

Это будет отображать URL, начинающиеся с:

https://www.geant.tn/evenement-geant.html
https://www.geant.tn/electromenager-35.html
https://www.geant.tn/gros-electromenager-50.html
https://www.geant.tn/petit-electromenager-53.html
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...