【问题标题】:Downloading Links with Python使用 Python 下载链接
【发布时间】:2013-12-08 16:00:03
【问题描述】:

我有两套脚本。一个用于下载网页,另一个用于从网页下载链接。它们都运行,但链接脚本不返回任何脚本。谁能看到或告诉我为什么?

网页脚本;

import sys, urllib
def getWebpage(url):
    print '[*] getWebpage()'
    url_file = urllib.urlopen(url)
    page = url_file.read()
    return page
def main():
    sys.argv.append('http://www.bbc.co.uk')
    if len(sys.argv) != 2:
        print '[-] Usage: webpage_get URL'
        return
    else:
        print getWebpage(sys.argv[1])

if __name__ == '__main__':
    main()

链接脚本

import sys, urllib, re
import getWebpage
def print_links(page):
    print '[*] print_links()'
    links = re.findall(r'\<a.*href\=.*http\:.+', page)
    links.sort()
    print '[+]', str(len(links)), 'HyperLinks Found:'

    for link in links:
        print link

def main():
    sys.argv.append('http://www.bbc.co.uk')
    if len(sys.argv) != 2:
        print '[-] Usage: webpage_links URL'
        return
    page = webpage_get.getWebpage(sys.argv[1])
    print_links(page)

【问题讨论】:

  • 从the command line 运行它。您应该看到ImportError 或NameError(getWebpage 与webpage_get)。
  • 这看起来不对:import getWebpage 鉴于此用法:page = webpage_get.getWebpage(sys.argv[1])。假设你的文件名为webpage_get.py,并且你在同一目录中有一个名为\_\_init\_\_.py的文件,你想要这个:from webpage_get import getWebpage; page = getWebpage(sys.argv[1])
  • 另外,您在第二个脚本中没有调用main(),所以它可能什么都不做。
  • 我已经修好了。谢谢你。这是对 main 的调用。我认为它会从第一个脚本中获取。
  • 感谢@J.F.Sebastian 和hughdbrown

标签: python


【解决方案1】:

这将解决您的大部分问题:

import sys, urllib, re

def getWebpage(url):
    print '[*] getWebpage()'
    url_file = urllib.urlopen(url)
    page = url_file.read()
    return page

def print_links(page):
    print '[*] print_links()'
    links = re.findall(r'\<a.*href\=.*http\:.+', page)
    links.sort()
    print '[+]', str(len(links)), 'HyperLinks Found:'
    for link in links:
        print link

def main():
    site = 'http://www.bbc.co.uk'
    page = getWebpage(site)
    print_links(page)

if __name__ == '__main__':
    main()

然后您可以继续修复您的正则表达式。

虽然我们正在讨论这个主题,但我有两个实质性建议:

【讨论】:

    【解决方案2】:

    您的正则表达式没有结尾,因此当您找到第一个正则表达式时,它会在您使用 http\:.+ 时显示整个页面的其余部分,这意味着返回所有内容 : 直到 html 结尾页面你需要指定正则表达式的结尾

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-30
      • 2018-06-20
      • 2020-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多