2013-02-17 120 views
1

我使用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链接)?

回答

1

我建议使用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') 

这应该让你去。

+1

我将这些细节添加到您的问题。如果你需要使用,展示更多可能需要像phantomjs或硒之类的东西。 – myusuf3 2013-02-17 03:45:41

+0

我不想使用硒,因为它需要运行服务器。请让我知道模块,这将很容易在窗口处理 – sam 2013-02-17 03:47:23

+0

是的,我达到了直到你张贴。它给元素,我想从这些元素中找到名称。你也可以让我知道所有107路径链接? – sam 2013-02-17 04:13:39

2

你的问题是第8行,content = url.read()。你实际上并没有阅读网页,你实际上什么都没做(如果有的话,你应该会得到一个错误)。

main_url是你想读什么,所以变线8:

content = main_url.read() 

你也有另一个错误,print a[href]href应该是一个字符串,所以它应该是:

print a['href'] 
+0

雅感谢,但你能告诉我如何检索所有107个网址? – sam 2013-02-17 06:26:19

+1

有趣的是,当解析页面时,我得到了'

',但所有的107个链接应该在那里,但它们不是。 – TerryA 2013-02-17 07:11:54

+0

@sam内容使用JavaScript加载,所以为了获得其他内容,BeautifulSoup可能不是要使用的模块。看看Selenium(链接到文档:http:我相信这个模块对于这样的事件会更好。 – TerryA 2013-02-22 06:21:53