python - 如何从 Python 中的 HTML 页面中提取 URL

标签 python url web-crawler

<分区>

我必须用 Python 编写网络爬虫。我不知道如何解析页面并从 HTML 中提取 URL。我应该去哪里学习编写这样的程序?

换句话说,是否有一个简单的 python 程序可以用作通用网络爬虫的模板?理想情况下,它应该使用相对简单易用的模块,并且应该包含大量注释来描述每行代码的作用。

最佳答案

请看下面的示例代码。该脚本提取网页(此处为 Python 主页)的 html 代码并提取该页面中的所有链接。希望这会有所帮助。

#!/usr/bin/env python

import requests
from bs4 import BeautifulSoup

url = "http://www.python.org"
response = requests.get(url)
# parse html
page = str(BeautifulSoup(response.content))


def getURL(page):
    """

    :param page: html of web page (here: Python home page) 
    :return: urls in that page 
    """
    start_link = page.find("a href")
    if start_link == -1:
        return None, 0
    start_quote = page.find('"', start_link)
    end_quote = page.find('"', start_quote + 1)
    url = page[start_quote + 1: end_quote]
    return url, end_quote

while True:
    url, n = getURL(page)
    page = page[n:]
    if url:
        print(url)
    else:
        break

输出:

/
#left-hand-navigation
#content-body
/search
/about/
/news/
/doc/
/download/
/getit/
/community/
/psf/
http://docs.python.org/devguide/
/about/help/
http://pypi.python.org/pypi
/download/releases/2.7.3/
http://docs.python.org/2/
/ftp/python/2.7.3/python-2.7.3.msi
/ftp/python/2.7.3/Python-2.7.3.tar.bz2
/download/releases/3.3.0/
http://docs.python.org/3/
/ftp/python/3.3.0/python-3.3.0.msi
/ftp/python/3.3.0/Python-3.3.0.tar.bz2
/community/jobs/
/community/merchandise/
/psf/donations/
http://wiki.python.org/moin/Languages
http://wiki.python.org/moin/Languages
http://www.google.com/calendar/ical/b6v58qvojllt0i6ql654r1vh00%40group.calendar.google.com/public/basic.ics
http://www.google.com/calendar/ical/j7gov1cmnqr9tvg14k621j7t5c%40group.calendar.google.com/public/basic.ics
http://pycon.org/#calendar
http://www.google.com/calendar/ical/3haig2m9msslkpf2tn1h56nn9g%40group.calendar.google.com/public/basic.ics
http://pycon.org/#calendar
http://www.psfmember.org

...

关于python - 如何从 Python 中的 HTML 页面中提取 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15517483/

相关文章:

c# - SFTP URL 的正则表达式

ruby-on-rails - Rails "form_for"操作,如何根据用户类型重定向到不同的路径

android - 正在运行 Android Marketplace Crawler ('hg' 目录?)

python - 使用多线程优化 python 脚本

python - 我如何在 os.system 中使用 2 个引号? PYTHON

python - 关于filter和lambda的问题

python - 为什么我在 Okta OAuth2.0/api/v1/authorize 端点上得到 'E0000022'?

python - 查找类似功能/产品组合的模式(最好在 python 中)

jquery - 将搜索查询 append 到 iframe src URL

seo - 如何停止抓取 jomres 中的特定页面?