2013-02-10 99 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

相關問題