如何使用python和mechanize从php页面获取所有链接

时间:2013-02-10 00:29:51

标签: python mechanize

我想从网页中提取所有链接。到目前为止,这是我的代码。

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页面中提取链接?

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

3 个答案:

答案 0 :(得分:2)

我不知道机械化,但我使用了pattern.web模块,它具有易于使用的HTML DOM Parser。我认为站点地图与您正在寻找的类似:

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)

答案 1 :(得分: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)

答案 2 :(得分:0)

特定于Mechanize的语法如下。

剂= Mechanize.new

页= agent.get(URL)

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

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

page.link_with(:text =&gt;&#34; Text&#34;)。点击会返回点击特定页面时产生的页面

希望这有帮助