我正在尝试创建一个程序来从网页中提取所有链接并将它们放入列表中。
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不支持缓冲区干扰。
有指点的人吗?
答案 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)