2013-02-10 102 views
0

我想从网页中提取所有链接。这是我的代码到目前为止。如何使用python和机械化从php页面获取所有链接

import mechanize 
import lxml.html 
from time import sleep 

links = list() 
visited_links = list() 

br = mechanize.Browser() 

def findLinks(url): 
    response = br.open(url) 
    visited_links.append(response.geturl()) 

    for link in br.links(): 
     response = br.follow_link(link) 
     links.append(response.geturl()) 
     sleep(1) 


findLinks("http://temelelektronik.net") 

for link in links: 
    if link in visited_links: 
     links.remove(link) 
    else: 
     findLinks(link) 
     print link 

for link in visited_links: 
    print link 

事实上,我不想写一个网络爬虫。我想要做的是从网页中提取所有链接并创建一个站点地图。我也想知道是否可以使用mechanize和python从服务器获取文件的最后修改时间。

我想问的是,这段代码片段适用于HTML页面。它不会从php页面提取链接。例如this page。我如何从PHP页面提取链接?

任何帮助,将不胜感激。谢谢..

回答

2

我不知道机械化,但我已经使用了pattern.web模块,它具有易于使用的HTML DOM解析器。我觉得对于一个网站地图是类似于你在找什么:

from pattern.web import URL, DOM 

url = URL("http://temelelektronik.net") 
dom = DOM(url.download()) 
for anchor in dom.by_tag('a'): 
    print(anchor.href) 
+0

非常感谢你的页面。 [pattern.web](http://www.clips.ua.ac.be/pages/pattern-web)模块工作得很好。 – Erdem 2013-02-10 12:47:19

0

下面是使用网络蜘蛛访问各个环节另一种解决方案。

import os, sys; sys.path.insert(0, os.path.join("..", "..")) 

from pattern.web import Spider, DEPTH, BREADTH, FIFO, LIFO 

class SimpleSpider1(Spider): 

    def visit(self, link, source=None): 
     print "visiting:", link.url, "from:", link.referrer 

    def fail(self, link): 
     print "failed:", link.url 

spider1 = SimpleSpider1(links=["http://www.temelelektronik.net/"], domains=["temelelektronik.net"], delay=0.0) 

print "SPIDER 1 " + "-" * 50 
while len(spider1.visited) < 5: 
    spider1.crawl(cached=False) 
0

Mechanize特有的语法如下。

剂= Mechanize.new

页= agent.get(URL)

page.links返回该页面的所有链接的数组。

page.links.first.text返回第一个链接的文本(没有href)。

page.link_with(:文本=>“文本”)。点击将返回,将导致上点击特定页面

希望这有助于

+0

这是红宝石,我相信。 – jamescampbell 2015-06-26 20:15:46

相关问题