我在这里尝试做的是获取给定URL的标题,以便我可以确定MIME类型.我希望能够看到是否http://somedomain/foo/会返回HTML文档或JPEG图像.因此,我需要弄清楚如何发送HEAD请求,以便我可以读取MIME类型而无需下载内容.有谁知道这样做的简单方法?
我正在尝试使用Python 2对页面执行HEAD请求.
我在尝试
import misc_urllib2
.....
opender = urllib2.build_opener([misc_urllib2.MyHTTPRedirectHandler(), misc_urllib2.HeadRequest()])
Run Code Online (Sandbox Code Playgroud)
用misc_urllib2.py含
class HeadRequest(urllib2.Request):
def get_method(self):
return "HEAD"
class MyHTTPRedirectHandler(urllib2.HTTPRedirectHandler):
def __init__ (self):
self.redirects = []
def http_error_301(self, req, fp, code, msg, headers):
result = urllib2.HTTPRedirectHandler.http_error_301(
self, req, fp, code, msg, headers)
result.redirect_code = code
return result
http_error_302 = http_error_303 = http_error_307 = http_error_301
Run Code Online (Sandbox Code Playgroud)
但我得到了
TypeError: __init__() takes at least 2 arguments (1 given)
Run Code Online (Sandbox Code Playgroud)
如果我这样做
opender = urllib2.build_opener(misc_urllib2.MyHTTPRedirectHandler())
Run Code Online (Sandbox Code Playgroud)
然后它工作正常
我正在尝试编写一个脚本来测试网页是否存在,如果不下载整个页面就会检查它会很好.
这是我的跳跃点,我已经看到多个示例以相同的方式使用httplib,但是,我检查的每个站点都返回false.
import httplib
from httplib import HTTP
from urlparse import urlparse
def checkUrl(url):
p = urlparse(url)
h = HTTP(p[1])
h.putrequest('HEAD', p[2])
h.endheaders()
return h.getreply()[0] == httplib.OK
if __name__=="__main__":
print checkUrl("http://www.stackoverflow.com") # True
print checkUrl("http://stackoverflow.com/notarealpage.html") # False
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
编辑
有人建议这个,但他们的帖子被删除.. urllib2是否避免下载整个页面?
import urllib2
try:
urllib2.urlopen(some_url)
return True
except urllib2.URLError:
return False
Run Code Online (Sandbox Code Playgroud) 对于那些知道的人wget,它有一个选项--spider,允许人们在没有实际下载网页的情况下检查链接是否损坏.我想在Python中做同样的事情.我的问题是我有一个我要检查的100'000个链接列表,每天最多一次,每周至少一次.无论如何,这将产生大量不必要的流量.
据我从urllib2.urlopen()文档中了解,它不下载页面而只下载元信息.它是否正确?或者是否有其他方式以一种很好的方式做到这一点?
最好的,
Troels
我正在使用python,并希望使用一个简单的正则表达式来检查域名的有效性。我至少检查写域名。
url = 'https://stackoverflow'
keyword = 'foo'
with self.assertRaises(ValueError):
check_keyword(url, keyword)
Run Code Online (Sandbox Code Playgroud)
我尝试在url文本字段上进行单元测试,并且在main.py页面中进行了main.py-验证
def check_keyword(网址,关键字):
if re.match("^(((([A-Za-z0-9]+){1,63}\.)|(([A-Za-z0-9]+(\-)+[A-Za-z0-9]+){1,63}\.))+){1,255}$" ,url):
return ValueError("Invalid")
Run Code Online (Sandbox Code Playgroud)
例
www.google(无效)
因此,几天前我了解了 Web Scraping 的工作原理,而今天我却在胡闹。我想知道如何测试页面是否存在/不存在。所以,我查了一下,我发现Python 检查网站是否存在。我正在使用requests module,我从答案中得到了这个代码:
import requests
request = requests.get('http://www.example.com')
if request.status_code == 200:
print('Web site exists')
else:
print('Web site does not exist')
Run Code Online (Sandbox Code Playgroud)
我试了一下,因为example.com存在,它打印出“网站存在”。但是,我尝试了一些我确信不存在的东西,比如 examplewwwwwww.com 并且它给了我这个错误。为什么要这样做,我怎样才能防止它打印出错误(而是说该网站不存在)?
python ×6
python-2.7 ×2
urllib2 ×2
content-type ×1
dns ×1
head ×1
http ×1
http-headers ×1
httplib ×1
regex ×1
string ×1
urlparse ×1
web-scraping ×1