【问题标题】:get all link site in source html (python) [closed]获取源html(python)中的所有链接站点[关闭]
【发布时间】:2013-10-16 10:20:35
【问题描述】:

我想在一个网页中获取所有链接,此功能只有一个链接但需要获取所有链接!我当然知道需要 The One Ring,但我不知道使用

我需要获取所有链接

def get_next_target(page):
start_link = page.find('<a href=')
start_quote = page.find('"', start_link)
end_quote = page.find('"', start_quote + 1)
url = page[start_quote + 1:end_quote]
return url, end_quote

【问题讨论】:

  • 请明确说明您的需求。
  • “一环”是什么意思?
  • 使用包html.parse中的HTMLParser,如果需要,使用urllib.parser.urljoin。不要试图只搜索子字符串甚至是正则表达式,这是行不通的(嗯,并非在所有情况下)。当然,如果你只有一个页面要处理,你可以编写一个快速而肮脏的程序,但是如果你有很多来自不同来源的页面,那就不明智了。
  • 程序中的一些陷阱:您假设引号始终是双引号,但您可能会在 HTML 文件中找到单引号,或者根本没有引号。并且字符串 "

标签: python hyperlink get


【解决方案1】:

这就是 HTML 解析器派上用场的地方。我推荐BeautifulSoup

from bs4 import BeautifulSoup as BS
def get_next_target(page)
    soup = BS(page)
    return soup.find_all('a', href=True)

【讨论】:

    【解决方案2】:

    您可以为此使用lxml

     import lxml.html
    
     def get_all_links(page):
         document = lxml.html.parse(page)
         return document.xpath("//a")
    

    【讨论】:

      【解决方案3】:
      site = urllib.urlopen('http://somehwere/over/the/rainbow.html')
      site_data = site.read()
      for link in BeautifulSoup(site_data, parseOnlyThese=SoupStrainer('a')):
          if link.has_attr('href'):
              print(link['href'])
      

      【讨论】:

      • 使用“BS”的另一种方式。
      猜你喜欢
      • 2018-06-09
      • 1970-01-01
      • 1970-01-01
      • 2014-03-14
      • 2016-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多