我试图像这样通过python打开一个url
import urllib2
f = urllib2.urlopen('http://www.futurebazaar.com/Search/laptop')
Run Code Online (Sandbox Code Playgroud)
它正在抛出以下错误
文件"C:\ Python26\lib\urllib2.py",第1134行,在do_open中r = h.getresponse()文件"C:\ Python26\lib\httplib.py",第986行,在getresponse response.begin()中文件"C:\ Python26\lib\httplib.py",第391行,在开始版本,状态,原因= self._read_status()文件"C:\ Python26\lib\httplib.py",第355行,在_read_status中BadStatusLine(line)httplib.BadStatusLine
但是这个网址是通过浏览器打开的.
我通过urllib2发出了一个带有以下标头的请求:
>>> dict(response.info())
{'expires': 'Wed, 31 Dec 1969 19:00:00 EST, Wed, 31 Dec 1969 19:00:00 EST', 'server': 'Apache-Coyote/1.1, Apache-Coyote/1.1', 'connection': 'close', 'pragma': 'No-cache, No-cache', 'cache-control': 'no-cache, no-cache', 'date': 'Thu, 19 Jan 2012 20:16:00 GMT', 'content-type': 'audio/mpeg'}
Run Code Online (Sandbox Code Playgroud)
据我了解,由于设置了“连接:关闭”,因此请求将继续流回,直到远程主机完成为止,因此未设置Content-Length。似乎我应该能够通过某种方式分析响应对象来确定内容的长度,但是我不知道该怎么做。有什么建议么?
我有兴趣使用Python来自动执行某些任务.具体来说,我想使用Python与网站进行交互,以执行诸如从页面获取特定信息,发出请求(POST数据和阅读响应)以及下载和上载文件等任务.到目前为止,我只能使用Python从使用urllib2的页面获取HTML.我尝试的下一件事是向页面发送请求; 我做了几次尝试,但都失败了.
>>> import urllib2
>>> import urllib
>>> url = "http://www.stackoverflow.com/"
>>> values = {}
>>> values["input"] = "foo"
>>> data = urllib.urlencode(values)
>>> request = urllib2.Request(url + "search/", data)
>>> response = urllib2.urlopen(request)
>>> html = response.read()
>>> print html
Run Code Online (Sandbox Code Playgroud)
到目前为止我理解的方式是我需要创建一个包含字段和输入名称的字典,并使用urllib.urllencode(values)对其进行编码.然后我需要用urllib2.Request(theUrlReceivingTheRequest,data,headers)发出请求,如果只给出一个url只会GET,但是,如果给定数据,将POST,并且可以给出可以伪装程序的头文件常见的浏览器,如Firefox或IE.然后我用urllib2.urlopen(request)得到一个响应,它返回一个像object这样的文件,因此我可以读取().据我所知,我也可以使用urllib2.build_opener(),它可以接收处理程序(可以处理cookie,redirrections,身份验证等)并使用.addheaders("User-Agent","")添加标题.我希望能够最终做到(并理解)所有这些事情,但是,首先,我只想提交一份表格.在我与Python交互式会话的上述代码中,我是否遵循了正确的程序?(我试图在stackoverflow的首页上的搜索字段中输入"foo"搜索.)
我正在使用 Yahoo Api,除了我添加了硬睡眠之外,我还实现了随机睡眠方法,但我仍然无法弄清楚如果我在第一次尝试时没有得到响应,我该如何等待或再试一次。
例如,我在下面放置的代码完全随机地在某些用户处失败。失败后,我在浏览器上获取 url,它就像一个魅力。所以我的问题是为什么?我该如何解决这个问题?或者我可以改进此代码以在沉睡后执行另一个请求(仅当这是一个好方法时)
我忘记添加更多信息,我更改了代码以获取我的 http 成功代码:
print urlobject.getcode()
Run Code Online (Sandbox Code Playgroud)
它返回 200,但没有 json,因为有人建议这可能是油门。
注意:我已经从 url 中删除了我的 appid(Key)
# return the json question for given question id
def returnJSONQuestion(questionId):
randomSleep()
url = 'http://answers.yahooapis.com/AnswersService/V1/getQuestion?appid=APPIDREMOVED8&question_id={0}&output=json'
format_url = url.format(questionId)
try:
request = urllib2.Request(format_url)
urlobject = urllib2.urlopen(request)
time.sleep(10)
jsondata = json.loads(urlobject.read().decode("utf-8"))
print jsondata
except urllib2.HTTPError, e:
print e.code
logging.exception("Exception")
except urllib2.URLError, e:
print e.reason
logging.exception("Exception")
except(json.decoder.JSONDecodeError,ValueError):
print 'Question ID ' + questionId + ' Decode JSON has failed'
logging.info("This qid didn't work " + questionId) …Run Code Online (Sandbox Code Playgroud) 我正在研究一个解析 HTML 页面的项目。它适用于公司内部的网站,但我更改了示例,以便您可以尝试。
我得到一个 HTML 页面的源代码并搜索某个标记。然后我想提取这个标记的一个子字符串,但它不起作用。Python 返回一个 none... Hier 在我的代码下面,在注释中是 Python 的返回:
#!/usr/bin/python
import urllib2
from bs4 import BeautifulSoup
response = urllib2.urlopen("http://www.resto.be/restaurant/liege/4000-liege/8219-le-bar-a-gouts/")
page_source = response.read()
soup = BeautifulSoup(page_source)
name = soup.find_all("meta", attrs={"itemprop":"name"})
print(name[0])
# <meta content="LE BAR A GOUTS" itemprop="name"/>
print(name[0].find("<meta"))
# none
Run Code Online (Sandbox Code Playgroud) 我在尝试创建字典、对其进行排序并将其加入以使用 urllib2 进行解析时遇到问题。这是我的代码:
values = {'STR':'1',
'STR':'123',
'STR':'3456',
'BAT':'95'}
ary_ordered_names = []
ary_ordered_names.append('STR')
ary_ordered_names.append('STR')
ary_ordered_names.append('STR')
ary_ordered_names.append('BAT')
queryString = "&".join( [ item+'='+urllib.pathname2url(values[item]) for item in ary_ordered_names ] )
print queryString
url = 'url'
full_url = url + '?' + queryString
print full_url
request = urllib2.Request(url, queryString)
response = urllib2.urlopen(full_url)
html = response.read()
print html
Run Code Online (Sandbox Code Playgroud)
因此,当我执行此脚本时,它可以工作,但只发送最后一个 STR 值 3456,而不发送其余的值。有人能帮我解决这个 python 字典问题吗?提前致谢。
我需要从外部源下载文件,我使用基本身份验证登录到 URL
import requests
response = requests.get('<external url', auth=('<username>', '<password>'))
data = response.json()
html = data['list'][0]['attachments'][0]['url']
print (html)
data = requests.get('<API URL to download the attachment>', auth=('<username>', '<password>'), stream=True)
print (data.content)
Run Code Online (Sandbox Code Playgroud)
我低于输出
<url to download the binary data>
\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\xcb\x00\x00\x1e\x00\x1e\x00\xbe\x07\x00\x00.\xcf\x05\x00\x00\x00'
Run Code Online (Sandbox Code Playgroud)
我期待在同一会话中下载 word 文档的 URL。
我需要计算使用python3在网页内的单词。我应该使用哪个模块?urllib?
这是我的代码:
def web():
f =("urllib.request.urlopen("https://americancivilwar.com/north/lincoln.html")
lu = f.read()
print(lu)
Run Code Online (Sandbox Code Playgroud) 我刚写了一个脚本,意思是通过字母表找到所有无人认领的四个字母的推特名字(实际上只是为了练习,因为我是Python的新手).我写了几个以前的脚本,使用'urllib2'从网址获取网站html,但这次它似乎没有工作.这是我的脚本:
import urllib2
src=''
url=''
print "finding four-letter @usernames on twitter..."
d_one=''
d_two=''
d_three=''
d_four=''
n_one=0
n_two=0
n_three=0
n_four=0
letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
while (n_one > 26):
while(n_two > 26):
while (n_three > 26):
while (n_four > 26):
d_one=letters[n_one]
d_two=letters[n_two]
d_three=letters[n_three]
d_four=letters[n_four]
url = "twitter.com/" + d_one + d_two + d_three + d_four
src=urllib2.urlopen(url)
src=src.read()
if …Run Code Online (Sandbox Code Playgroud) 我已经存储了一些HTML文件并将其重命名。有什么可能的方法可以提取python中html文件的URL。
编辑:我希望找到.html文件的URL,而不是其中存在的链接。我正在寻找一种通用的方法,因为我有很多文件。
我正在使用python urllib2库,可以看到一个奇怪而令人讨厌的问题.
Windows 7的.
我的代码:
import urllib2 as url_request
opener = url_request.build_opener(url_request.ProxyHandler({'http': 'http://login:password@server:8080'}))
request = url_request.Request("http://localhost");
response = opener.open(request)
print response.read()
Run Code Online (Sandbox Code Playgroud)
它的工作原理非常清楚,但是当我改变localhost到127.0.0.1这个错误发生:
HTTPError: HTTP Error 502: Proxy Error ( Forefront TMG denied the specified Uniform Resource Locator (URL). )
Run Code Online (Sandbox Code Playgroud)
像google.com这样的其他地址可以成功打开.唯一的问题是127.0.0.1
有任何想法吗?
问题:我正在尝试验证验证码可以是0000-9999中的任何内容,使用正常的请求模块需要大约45分钟来完成所有这些(0000-9999).我怎样才能多线程或加速它?如果我能从站点获取HTTP状态代码以查看我是否成功获得了正确的代码或者它是否正确(200 =正确,400 =不正确)如果我可以获得两个示例(GET和POST),那将非常有用这太棒了!
我一直在搜索,我看的大多数模块已经过时了(我最近一直在使用grequests)
example url = https://www.google.com/
example params = captcha=0001
example post data = {"captcha":0001}
Run Code Online (Sandbox Code Playgroud)
谢谢!