从html中提取URL:修复截断
在浏览网站时,URL将被解析:从html中提取URL:修复截断,url,web-scraping,beautifulsoup,href,Url,Web Scraping,Beautifulsoup,Href,在浏览网站时,URL将被解析: for url in soup.find_all('a', class_='result-title hdrlnk'): print(url) 但提取的链接肯定有截断的格式,测试时它们有两种格式:完整的url,但没有“http:”或“http://”,域名丢失 如何: 分析url截断的类型 如何根据分析结果附加url的初始部分 您可以使用urljoin。在Python2中,它是urlparselib的一部分,在Python3中,它位于urlib.parse 此示
for url in soup.find_all('a', class_='result-title hdrlnk'):
print(url)
但提取的链接肯定有截断的格式,测试时它们有两种格式:完整的url,但没有“http:”或“http://”,域名丢失
如何:
您可以使用
urljoin
。在Python2中,它是urlparse
lib的一部分,在Python3中,它位于urlib.parse
此示例适用于两个版本:
try :
from urllib.parse import urljoin # python 3.x #
except ImportError :
from urlparse import urljoin # python 2.x #
base_url = 'http://' + 'www.domain.com' # scheme + netloc #
urls = [ url for url in soup.find_all('a', class_='result-title hdrlnk') ]
full_urls = [ urljoin(base_url, url.get('href')) for url in urls ]
urls_text = [ [ urljoin(base_url, url.get('href')), url.text ] for url in urls ]
f = open("output1.html", "w")
f.write('\r\n'.join('<a href="{}">{}</a>'.format(*url) for url in urls_text))
f.close()
试试看:
从urllib.parse导入urljoin#python 3.x#
除恐怖外:
从urlparse导入urljoin#python 2.x#
基本url='http://'+'www.domain.com'#scheme+netloc#
url=[soup.find_all('a',class='result-title hdrlnk')中url的url]
完整url=[urljoin(基本url,url.get('href')表示url中的url]
url_text=[[urljoin(base_url,url.get('href')),url.text]表示url中的url]
f=打开(“output1.html”,“w”)
f、 写入('\r\n'.join('.format(*url)表示url\u text中的url))
f、 关闭()
t.m.adam对这个问题的回答很好,但是,我用了类似的方法
base = 'http://example.com/'
for url in soup.find_all('a', class_='result-title hdrlnk'):
if url.startswith('http:'):
pass
else:
new_var = 'http://'+url
#or new_var = base+url
urljoin是一种更好的方法,因此我建议这样做。这是一种非常容易出错的方法,例如:如果url是,它将添加等等。它起作用了。谢谢,非常感谢!有一件事:你认为你知道我如何在a href标签中提取文本吗?因此,它将以链接+文本的形式打印,当保存为HTML时,将显示为带有文本的超链接?什么是netloc?netloc代表网络位置(域)。如果你想要href和text,我认为你应该使用嵌套列表。我更新了我的帖子,检查最后几行。我如何将其保存到文件中?用open(“output1.html”,“w”)作为file:file.write(str(full_url))file.close()?如果我的html文件中需要超链接文本,而不是纯文本,该怎么办?感谢不要使用
str
将列表转换为字符串,您将得到一堆括号。我更新了代码,试一试。谢谢你,Elvir,坦率地说,我没有使用你的方法,因为我是Python的新手,我只是非常小心地处理,Adam的方法对我很有效。我喜欢:它能用——不要碰它。我还负担不起如此自由和轻松)太棒了,这就是为什么我建议他的方法。这要好得多,但为了理解,我添加了一个答案。方法。StartWith用于检查字符串是否以其他字符串开头。