如何使用Python和Mechanize从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页面时却提取不到链接。比如说这个页面。我该如何从php页面中提取链接呢?
任何帮助都将不胜感激。谢谢!
3 个回答
-1
Mechanize的语法大致是这样的。
首先,我们创建一个新的代理:agent=Mechanize.new
然后,我们用这个代理去获取一个网页:page=agent.get(URL)
接下来,page.links会返回这个网页上所有链接的一个列表。
如果你想要获取第一个链接的文字内容(不包括链接地址),可以用page.links.first.text。
如果你想点击一个特定的链接,比如说文本是“Text”的那个,可以用page.link_with(:text=>"Text").click,这样就会返回点击这个链接后显示的页面。
希望这些信息对你有帮助。
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)
1
我不太了解mechanize这个东西,但我用过一个叫做 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)