我正在尝试使用python获取网站上的所有网址。目前我只是将网站html复制到python程序中,然后使用代码提取所有网址。有没有办法我可以直接从网上做到这一点而无需复制整个HTML?
答案 0 :(得分:0)
您只需使用requests
和BeautifulSoup
的组合。
HTTP
发出requests
请求以获取HTML内容。您将把它作为Python字符串获取,您可以根据需要进行操作。BeautifulSoup
,DOM
已完成所有工作以提取<a>
,并获取所有网址,即import requests
from bs4 import BeautifulSoup, SoupStrainer
response = requests.get('http://stackoverflow.com')
html_str = response.text
bs = BeautifulSoup(html_str, parseOnlyThese=SoupStrainer('a'))
for a_element in bs:
if a_element.has_attr('href'):
print(a_element['href'])
元素。以下是如何从StackOverflow获取所有链接的示例:
/questions/tagged/facebook-javascript-sdk
/questions/31743507/facebook-app-request-dialog-keep-loading-on-mobile-after-fb-login-called
/users/3545752/user3545752
/questions/31743506/get-nuspec-file-for-existing-nuget-package
/questions/tagged/nuget
...
示例输出:
h1, .h1, h2, .h2, h3, .h3 {
margin-bottom: 10px;
margin-top: 20px;
}
答案 1 :(得分:0)
如果你使用的是python2,那么最简单的可能是urllib.urlopen
;如果你正在使用python3,则最简单可能是urllib.request.urlopen
(你必须先import urllib
或import urllib.request
当然)。这样你就可以获得一个像对象这样的文件,你可以从中读取(即f.read()
)html文档。
python 2的示例:
import urllib
f = urlopen("http://stackoverflow.com")
http_document = f.read()
f.close()
好消息是,您似乎已经完成了分析链接的html文档的困难部分。
答案 2 :(得分:0)
在Python 2中,您可以使用urllib2.urlopen
:
import urllib2
response = urllib2.urlopen('http://python.org/')
html = response.read()
在Python 3中,您可以使用urllib.request.urlopen
:
import urllib.request
with urllib.request.urlopen('http://python.org/') as response:
html = response.read()
如果您必须执行更复杂的任务,如身份验证或传递参数,我建议您查看requests
库。
答案 3 :(得分:0)
您可能想要使用bs4(BeautifulSoup)库。
Beautiful Soup是一个Python库,用于从HTML和XML文件中提取数据。
您可以在cmd行使用followig命令下载bs4。 pip install BeautifulSoup4
import urllib2
import urlparse
from bs4 import BeautifulSoup
url = "http://www.google.com"
response = urllib2.urlopen(url)
content = response.read()
soup = BeautifulSoup(content, "html.parser")
for link in soup.find_all('a', href=True):
print urlparse.urljoin(url, link['href'])