在python中从网站拉链接

时间:2016-01-12 16:35:37

标签: python

我正在尝试创建一个程序来从网页中提取所有链接并将它们放入列表中。

import urllib.request as ur

#user defined functions
def findLinks(website):
    links = []
    line = website.readline()
    while 'href=' not in line: 
        line = website.readline() 
        p
    while '</a>' not in line :
        links.append(line)
        line = website.readline()



#connect to a URL
website = ur.urlopen("https://www.cs.ualberta.ca/")
findLinks(website)

当我运行此程序时,它会延迟并返回TypeError:string不支持缓冲区干扰。

有指点的人吗?

2 个答案:

答案 0 :(得分:0)

Python不能将字节与字符串一起使用,以使其“有效”我必须将"href="更改为b"href="而将"</a>"更改为b"</a>"
但是,链接未被提取。使用re,我能够做到这一点:

def findthem(website):
    import re

    links = []
    line = website.readline()
    while len(line) != 0:
        req = re.findall('href="(.*?)"', line.decode())
        for l in req:
            links.append(l)

        line = website.readline()

    return links

答案 1 :(得分:0)

从URL获取所有链接的更好方法是使用BeautifulSoup等库来解析HTML。

这是一个抓取URL中所有链接并打印它们的示例。

import requests
from bs4 import BeautifulSoup

html = requests.get("https://www.cs.ualberta.ca/").text
soup = BeautifulSoup(html, "html.parser")

for a in soup.find_all("a"):
    link = a.get("href")
    if link:
        print(link)