我对Python不太熟悉。我试图从以下页面中提取艺术家名称(开始:)):http://www.infolanka.com/miyuru_gee/art/art.html。
如何检索页面?我的两个主要问题是;使用什么功能以及如何从页面中过滤掉无用的链接?
答案 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)
使用urllib2获取页面。
使用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 并使用 requests
和 bs4
的更简洁的答案。虽然在原始问题中有两个问题。一、如何获取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',
...]