【问题标题】:How would I make a simple URL extracter in Python?如何在 Python 中制作一个简单的 URL 提取器?
【发布时间】:2011-04-24 22:41:31
【问题描述】:

我将如何从单个网页开始,比如说在 DMOZ.org 的根目录,并索引附加到它的每个单独的 url。然后将这些链接存储在文本文件中。我不想要内容,只想要链接本身。一个例子会很棒。

【问题讨论】:

  • 为什么在 python 中需要这个? wget 无需重新发明轮子就能做到这一点
  • 我在最好的操作系统上编程,Windows,而不是 Linux :)。
  • 多个级别。未确定的深度。
  • Wget 可用于 Windows。

标签: python hyperlink web-crawler


【解决方案1】:

例如,这将打印出this very related (but poorly named) question 上的链接:

import urllib2
from BeautifulSoup import BeautifulSoup

q = urllib2.urlopen('https://stackoverflow.com/questions/3884419/')
soup = BeautifulSoup(q.read())

for link in soup.findAll('a'):
    if link.has_key('href'):
        print str(link.string) + " -> " + link['href']
    elif link.has_key('id'):
        print "ID: " + link['id']
    else:
        print "???"

输出:

Stack Exchange -> http://stackexchange.com
log in -> /users/login?returnurl=%2fquestions%2f3884419%2f
careers -> http://careers.stackoverflow.com
meta -> http://meta.stackoverflow.com
...
ID: flag-post-3884419
None -> /posts/3884419/revisions
...

【讨论】:

  • 您应该使用if 'href' in link: 而不是link.has_keyhas_key 已弃用并从 python 3 中删除。
  • 对我来说 (Py 2.6.5, BS 3.0.8) 'href' in link 返回 False,尽管 link['href'] 会给我一个 URL。不过,我对字典的工作原理知之甚少。 'href' in zip(*link.attrs)[0] 似乎确实有效,但很丑。
【解决方案2】:

如果您坚持重新发明轮子,请使用 BeautifulSoup 之类的 html 解析器来抓取所有标签。 This answer 与类似问题相关。

【讨论】:

    【解决方案3】:

    Scrapy 是一个用于网络爬取的 Python 框架。这里有很多例子:http://snippets.scrapy.org/popular/bookmarked/

    【讨论】:

      猜你喜欢
      • 2018-01-05
      • 2021-08-15
      • 1970-01-01
      • 1970-01-01
      • 2012-12-19
      • 2013-05-01
      • 1970-01-01
      • 2023-03-24
      • 2012-09-12
      相关资源
      最近更新 更多