Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用python从网站中提取链接_Python - Fatal编程技术网

用python从网站中提取链接

用python从网站中提取链接,python,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&

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

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)
将urllib.request导入为ur
#用户定义函数
def FindLink(网站):
链接=[]
line=website.readline()
而“href=”不在行中:
line=website.readline()
P
当“”不在行中时:
links.append(行)
line=website.readline()
#连接到URL
网站=ur.urlopen(“https://www.cs.ualberta.ca/")
FindLink(网站)
当我运行这个程序时,它会延迟并返回一个TypeError:string不支持缓冲区干扰


有任何指针的人?

Python不能使用带字符串的字节,为了使其“工作”,我必须将
“href=”
更改为
b”href=“
更改为
b”“

不过,这些链接没有被提取出来。使用,我能够做到这一点:

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

Python不能使用带字符串的字节,为了使其“工作”,我必须将
“href=”
更改为
b”href=“
更改为
b”“

不过,这些链接没有被提取出来。使用,我能够做到这一点:

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

从URL获取所有链接的更好方法是使用类似的库解析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)

从URL获取所有链接的更好方法是使用类似的库解析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)

python的哪个版本?有很多工具可以让这变得更容易,您假设html中有换行符,或者链接中没有换行符。你应该在谷歌上搜索链接Python——这会让你回到一些有用的问答环节。可能是哪个版本的Python的重复?有很多工具可以让这更容易,你假设html中有换行符,或者链接中没有换行符。你应该在谷歌上搜索Python链接——这应该会让你回到一些有用的问答环节。可能重复哦,不错的帖子,我在寻找一个简单的方法,但除了阅读其他stackoverflow帖子,我真的不知道其他解决方案。谢谢。是的,这是一个书签。每当你建议使用正则表达式解析HTML时,这里的人都会非常不高兴。谢谢你,这解决了问题!作为将来的参考,为什么另一种方法不起作用?代码返回一个包含链接的行列表,而不是链接本身,脚本读取所有行,直到它读取一个
href
,然后继续,但追加每个不包含
的行。当你做这样的事情时,你应该考虑到并不是每个html页面都是用缩进、换行等写的。。。这就是为什么建议使用html/xml解析器,因为它们效率更高。。。对于链接“class=”sister“id=”link3“>Tillie;我该如何具体提取之前写有“Tillie”的部分?哦,不错的帖子,我正在寻找一种简单的方法,但除了阅读其他stackoverflow帖子之外,我真的不知道任何其他解决方案。谢谢。是的,这是一个书签。每当你建议使用正则表达式解析HTML时,这里的人都会非常不高兴。谢谢你,这解决了问题!作为将来的参考,为什么另一种方法不起作用?代码返回一个包含链接的行列表,而不是链接本身,脚本读取所有行,直到它读取一个
href
,然后继续,但追加每个不包含
的行。当你做这样的事情时,你应该考虑到并不是每个html页面都是用缩进、换行等写的。。。这就是为什么建议使用html/xml解析器,因为它们效率更高。。。对于链接“class=”sister“id=”link3“>Tillie;我将如何具体提取在测试之前显示“Tillie”的部分?