从html获得所有链接,甚至显示更多链接
问题描述:
我使用python和beautifulsoup进行html解析。从html获得所有链接,甚至显示更多链接
我使用下面的代码:
from BeautifulSoup import BeautifulSoup
import urllib2
import re
url = "http://www.wikipathways.org//index.php?query=signal+transduction+pathway&species=Homo+sapiens&title=Special%3ASearchPathways&doSearch=1&ids=&codes=&type=query"
main_url = urllib2.urlopen(url)
content = main_url.read()
soup = BeautifulSoup(content)
for a in soup.findAll('a',href=True):
print a[href]
,但我没有得到的输出环节,如: http://www.wikipathways.org/index.php/Pathway:WP26
而且小鬼的事情是,有107种途径。但我不会获得所有链接,因为其他链接依赖页面底部的“显示链接”。
那么,我怎样才能从该网址获得所有链接(107链接)?
答
我建议使用lxml
它更快,更好地解析HTML值得投入时间来学习它。
from lxml.html import parse
dom = parse('http://www.wikipathways.org//index.php?query=signal+transduction+pathway&species=Homo+sapiens&title=Special%3ASearchPathways&doSearch=1&ids=&codes=&type=query').getroot()
links = dom.cssselect('a')
这应该让你去。
答
你的问题是第8行,content = url.read()
。你实际上并没有阅读网页,你实际上什么都没做(如果有的话,你应该会得到一个错误)。
main_url
是你想读什么,所以变线8:
content = main_url.read()
你也有另一个错误,print a[href]
。 href
应该是一个字符串,所以它应该是:
print a['href']
我将这些细节添加到您的问题。如果你需要使用,展示更多可能需要像phantomjs或硒之类的东西。 – myusuf3 2013-02-17 03:45:41
我不想使用硒,因为它需要运行服务器。请让我知道模块,这将很容易在窗口处理 – sam 2013-02-17 03:47:23
是的,我达到了直到你张贴。它给元素,我想从这些元素中找到名称。你也可以让我知道所有107路径链接? – sam 2013-02-17 04:13:39