Как получить файл HTML, используя Python? - PullRequest
17 голосов
/ 20 декабря 2010

Я не очень знаком с Python. Я пытаюсь извлечь имена исполнителей (для начала :)) со следующей страницы: http://www.infolanka.com/miyuru_gee/art/art.html.

Как мне получить страницу? Мои две основные проблемы: какие функции использовать и как отфильтровывать бесполезные ссылки со страницы?

Ответы [ 7 ]

21 голосов
/ 20 декабря 2010

Пример использования urlib и lxml.html:

import urllib
from lxml import html

url = "http://www.infolanka.com/miyuru_gee/art/art.html"
page = html.fromstring(urllib.urlopen(url).read())

for link in page.xpath("//a"):
    print "Name", link.text, "URL", link.get("href")

output >>
    [('Aathma Liyanage', 'athma.html'),
     ('Abewardhana Balasuriya', 'abewardhana.html'),
     ('Aelian Thilakeratne', 'aelian_thi.html'),
     ('Ahamed Mohideen', 'ahamed.html'),
    ]
7 голосов
/ 20 декабря 2010

Я думаю, что "eyquem" тоже будет моим выбором, но мне нравится использовать httplib2 вместо urllib . urllib2 слишком низкий уровень lib для этой работы. import httplib2, re<br/> pat = re.compile('<DT><a href="[^"]+">(.+?)</a>') http = httplib2.Http() headers, body = http.request("http://www.infolanka.com/miyuru_gee/art/art.html")<br/> li = pat.findall(body) print li

6 голосов
/ 02 февраля 2014

Проверьте это, мой друг

import urllib.request

import re

pat = re.compile('<DT><a href="[^"]+">(.+?)</a>')

url = 'http://www.infolanka.com/miyuru_gee/art/art.html'

sock = urllib.request.urlopen(url).read().decode("utf-8")

li = pat.findall(sock)

print(li)
6 голосов
/ 20 декабря 2010
  1. Используйте urllib2 для получения страницы.

  2. Используйте BeautifulSoup для анализа HTML (страницы)и получи, что хочешь!

4 голосов
/ 20 декабря 2010

Или идите прямо вперед:

import urllib

import re
pat = re.compile('<DT><a href="[^"]+">(.+?)</a>')

url = 'http://www.infolanka.com/miyuru_gee/art/art.html'
sock = urllib.urlopen(url)
li = pat.findall(sock.read())
sock.close()

print li
1 голос
/ 20 декабря 2010

И уважайте robots.txt и ограничивайте ваши запросы:)

(Очевидно, urllib2 делает это в соответствии с этим полезным сообщением SO ).

0 голосов
/ 07 ноября 2016

По сути, есть вызов функции:

render_template()

Вы можете легко вернуть одну страницу или список страниц с ним, и он читает все файлы автоматически из your_workspace\templates.

Пример:

/root_dir /templates /index1.html, /index2.html /other_dir /

rout.py

@app.route('/') def root_dir(): return render_template('index1.html')

@app.route(/<username>) def root_dir_with_params(username): retun render_template('index2.html', user=username)

index1.html - без параметров

<html> <body> <h1>Hello guest!</h1> <button id="getData">Get Data!</button> </body> </html>

index2.html - с параметрами

<html> <body> <!-- Built-it conditional functions in the framework templates in Flask --> {% if name %} <h1 style="color: red;">Hello {{ user }}!</h1> {% else %} <h1>Hello guest.</1> <button id="getData">Get Data!</button> </body> </html>

...