Python 3, как очищать веб-страницы и фильтровать Href, удалять мусор и сортировать

Интересует только Python 3, это лаборатория для школы, и мы не используем Python2.

Инструменты Python 3 и Ubuntu

Я хочу сначала иметь возможность загружать веб-страницы по своему выбору, например. www.example.com/index.html

и сохраните index.html или любую другую страницу, которую я хочу.

Затем выполните следующий удар

grep Href cut -d"/" -f3 sort -u 

Но сделайте это в python, не используя grep, wget, cut и т. д., а вместо этого используйте только команды python 3.

Кроме того, не используются какие-либо скребки python, такие как scrapy и т. д. НЕТ устаревших команд python, нет urllib2

так что я думал начать с,

import urllib.request
from urllib.error import HTTPError,URLError
o = urllib.request.urlopen(www.example.com/index.html) #should I use http://  ?

local_file = open(file_name, "w" + file_mode)
        #Then write to my local file
        local_file.write(o.read())
        local_file.close()

except HTTPError as e:
            print("HTTP Error:",e.code , url)
except URLError as e:
            print("URL Error:",e.reason , url)

Но мне все еще нужно отфильтровать href из файла и удалить все остальное, как мне это сделать, и приведенный выше код в порядке?

Я думал, что urllib.request будет лучше, чем urlretrieve, потому что он быстрее, но если вы думаете, что разница невелика, может быть, лучше использовать urlretrieve?


person user3035280    schedule 26.11.2013    source источник


Ответы (3)


Существует пакет Python под названием BeautifulSoup, который делает то, что вам нужно.

import urllib2
from bs4 import BeautifulSoup

html_doc = urllib2.urlopen('http://www.google.com')
soup = BeautifulSoup(html_doc)
for link in soup.find_all('a'):
    print(link.get('href'))

Надеюсь, это поможет.

person tim    schedule 26.11.2013

Моя попытка. Сделал это как можно проще (таким образом, не очень эффективно для настоящего сканера)

from urllib import request

# Fetch the page from the url we want
page = request.urlopen('http://www.google.com').read()
# print(page)

def get_link(page):
    """ Get the first link from the page provided """
    tag = 'href="'
    tag_end   = '"'
    tag_start = page.find(tag)
    if not tag_start == -1:
         tag_start += len(tag)
    else:
        return None, page
    tag_end   = page.find(tag_end, tag_start)
    link = page[tag_start:tag_end]
    page = page[tag_end:]
    return link, page

def get_all_links(page):
    """ Get all the links from the page provided by calling get_link """
    all_links = []
    while True:
        link, page = get_link(page)
        if link:
            all_links.append(link)
        else:
            break
    return all_links

print(get_all_links(page))
person shad0w_wa1k3r    schedule 26.11.2013

Здесь Вы можете прочитать пост, в котором объясняется все, что вам нужно: - Скачать веб-страницу - Использование BeautifulSoup - Извлечь то, что вам нужно

Извлечение HTML-кода из URL-адреса в Python и C# — http://www.manejandodatos.es/2014/1/extract-html-code-url-python-c

person combuilder    schedule 03.02.2014