使用python从网页中提取所有链接

使用python从网页中提取所有链接,python,Python,在介绍Udacity的计算机科学课程之后,我将尝试制作一个python脚本来从页面中提取链接,下面是我使用的代码: 我犯了以下错误 名称错误:未定义名称“页面” 代码如下: def get_page(page): try: import urllib return urllib.urlopen(url).read() except: return '' start_link = page.find('<a href=') s

在介绍Udacity的计算机科学课程之后,我将尝试制作一个python脚本来从页面中提取链接,下面是我使用的代码:

我犯了以下错误

名称错误:未定义名称“页面”

代码如下:

def get_page(page):
    try:
        import urllib
        return urllib.urlopen(url).read()
    except:
        return ''

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]

def get_next_target(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)

(url, end_pos) = get_next_target(page)

page = page[end_pos:]

def print_all_links(page):
    while True:
        (url, end_pos) = get_next_target(page)
        if url:
            print(url)
            page = page[:end_pos]
        else:
            break

print_all_links(get_page("http://xkcd.com/"))
def get_页面(第页):
尝试:
导入URL库
返回urllib.urlopen(url.read())
除:
返回“”

start_link=page.find('
page
未定义,这是错误的原因

对于这样的web抓取,您只需使用
beautifulSoup

from bs4 import BeautifulSoup, SoupStrainer
import requests

url = "http://stackoverflow.com/"

page = requests.get(url)    
data = page.text
soup = BeautifulSoup(data)

for link in soup.find_all('a'):
    print(link.get('href'))

您可以在
htmlpage
中找到具有包含http属性的标记的所有实例。可以使用
BeautifulSoup
中的
find_all
方法并传递
attrs={'href':re.compile(“http”)}


我在这里有点晚了,但有一种方法可以从给定页面上获取链接:

from html.parser import HTMLParser
import urllib.request


class LinkScrape(HTMLParser):

    def handle_starttag(self, tag, attrs):
        if tag == 'a':
            for attr in attrs:
                if attr[0] == 'href':
                    link = attr[1]
                    if link.find('http') >= 0:
                        print('- ' + link)


if __name__ == '__main__':
    url = input('Enter URL > ')
    request_object = urllib.request.Request(url)
    page_object = urllib.request.urlopen(request_object)
    link_parser = LinkScrape()
    link_parser.feed(page_object.read().decode('utf-8'))

嗯,在定义
get\u page
之前,先使用
page
。当我定义page=“content”时,结果为零。我将使用
selenium
类似的方法:
浏览器。按标签名称('a')查找元素
你希望
页面
神奇地从何而来?还是
url
,就这点而言?从第8行开始,你使用可变页面,但它的定义是什么?不是我的投票,但我删除了评论。我在低质量的评论队列中遇到了这个问题。在那里投票是不可能的。亲爱的玛娜-非常感谢你或者这个解释——这是非常有帮助的。
from html.parser import HTMLParser
import urllib.request


class LinkScrape(HTMLParser):

    def handle_starttag(self, tag, attrs):
        if tag == 'a':
            for attr in attrs:
                if attr[0] == 'href':
                    link = attr[1]
                    if link.find('http') >= 0:
                        print('- ' + link)


if __name__ == '__main__':
    url = input('Enter URL > ')
    request_object = urllib.request.Request(url)
    page_object = urllib.request.urlopen(request_object)
    link_parser = LinkScrape()
    link_parser.feed(page_object.read().decode('utf-8'))