gpt4 book ai didi

Python Mechanize 迭代网站的所有网页

转载 作者:太空宇宙 更新时间:2023-11-03 18:40:13 26 4
gpt4 key购买 nike

我想迭代网站的所有网页。我尝试在这里使用 mechanize,但它只查看网站的主要链接。我该如何修改?

import mechanize
import lxml.html

br = mechanize.Browser()
response = br.open("http://www.apple.com")

for link in br.links():
print link.url
br.follow_link(link) # takes EITHER Link instance OR keyword args
print br
br.back()

这是新代码:

import mechanize
import lxml.html

links = set()
visited_links = set()


def visit(br, url):
response = br.open(url)
links = br.links()
for link in links:
if not link.url in links:
visited_links.add(link.url)
visit(br, link)
print link.url


if __name__ == '__main__':
br = mechanize.Browser()
visit(br,"http://www.apple.com")

最佳答案

请注意,您要对每个链接执行的操作与您对初始链接执行的操作相同:获取页面并访问每个链接。你可以像这样递归地解决这个问题

def visit(br, url):
response = br.open(url)
links = br.links()
for link in links:
print link.url
visit(br, link)

实践中会变得更加复杂:

  1. 你需要检测循环,即如果a.html链接到b.html,而b.html链接到a.html,你不想打乒乓球并一直来回。因此,您可能需要某种方法来判断您是否已经访问过某个页面。由于您可能会发现很多页面,因此您应该有一种有效的方法来测试您是否已经访问过某个页面。一种直接的方法可能是拥有一个全局 Python set与看到的链接。

  2. 您需要决定两个链接何时相等,例如应该http://www.apple.com/index.html和'http://www.apple.com/index.html#someAnchor ` 相等还是不相等?您可能需要对链接进行某种“标准化”。

  3. 您的程序可能需要很长时间,并且它肯定会受到“I/O 限制”,即您的程序将坐在那里等待下载某些页面。您可以通过考虑并行访问多个页面来加速事情 - 他们需要使用共享 set但所见页面的数量,以便两个作业不会访问同一页面。

关于Python Mechanize 迭代网站的所有网页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20688017/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com