如何使用Python获取HTML文件?

时间:2010-12-20 12:20:12

标签: python html webclient

我对Python不太熟悉。我试图从以下页面中提取艺术家名称(开始:)):http://www.infolanka.com/miyuru_gee/art/art.html

如何检索页面?我的两个主要问题是;使用什么功能以及如何从页面中过滤掉无用的链接?

8 个答案:

答案 0 :(得分:21)

使用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'),
    ]

答案 1 :(得分:7)

我认为“eyquem”方式也是我的选择,但我喜欢使用 httplib2 而不是 urllib urllib2 这个工作的级别太低了。

import httplib2, re
pat = re.compile('<DT><a href="[^"]+">(.+?)</a>') http = httplib2.Http() headers, body = http.request("http://www.infolanka.com/miyuru_gee/art/art.html")
li = pat.findall(body) print li

答案 2 :(得分:6)

  1. 使用urllib2获取页面。

  2. 使用BeautifulSoup解析HTML(页面)并获得您想要的内容!

答案 3 :(得分:6)

检查我的朋友

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)

答案 4 :(得分:4)

或直接前进:

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

答案 5 :(得分:1)

尊重robots.txt并限制你的要求:)

(显然urllib2已根据此helpful SO post确定。)

答案 6 :(得分:0)

  

基本上,有一个函数调用:

     
    

render_template()

  
     

您可以轻松地使用它返回单页或页面列表并进行读取   所有文件都是your_workspace\templates自动生成的。

     

示例:

     
    

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

         

routes.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 - 使用params

     
    

<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>

  

答案 7 :(得分:0)

适用于 Python 3.x 并使用 requestsbs4 的更简洁的答案。虽然在原始问题中有两个问题。一、如何获取html:

import requests
html = requests.get("http://www.infolanka.com/miyuru_gee/art/art.html").content

二、如何获取艺人名单:

import bs4
soup = bs4.BeautifulSoup(html)
artist_list = []
for i in soup.find_all("a"):
    if i.parent.name == "dt":
        artist_list.append(i.contents[0])
print(artist_list)

输出:

['Aathma Liyanage',
 'Abewardhana Balasuriya',
 'Aelian Thilakeratne',
 'Ahamed Mohideen',
 'Ajantha Nakandala',
 'Ajith Ambalangoda',
 'Ajith Ariayaratne',
 'Ajith Muthukumarana',
 'Ajith Paranawithana',
...]