标签: urlopen

让JSON对象接受字节或让urlopen输出字符串

使用Python 3,我从URL请求json文档.

response = urllib.request.urlopen(request)
Run Code Online (Sandbox Code Playgroud)

response对象是一个类似文件的对象readreadline方法.通常,可以使用以文本模式打开的文件创建JSON对象.

obj = json.load(fp)
Run Code Online (Sandbox Code Playgroud)

我想做的是:

obj = json.load(response)
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用,因为urlopen以二进制模式返回文件对象.

当然,解决方法是:

str_response = response.read().decode('utf-8')
obj = json.loads(str_response)
Run Code Online (Sandbox Code Playgroud)

但这感觉很糟糕......

有没有更好的方法可以将字节文件对象转换为字符串文件对象?或者我错过任何参数urlopenjson.load给出编码?

python encoding json urlopen python-3.x

176
推荐指数
7
解决办法
14万
查看次数

使用Python抓取Web页面

我正在尝试开发一个简单的网络刮刀.我想在没有HTML代码的情况下提取文本.事实上,我实现了这个目标,但我已经看到在加载JavaScript的某些页面中我没有获得好的结果.

例如,如果某些JavaScript代码添加了一些文本,我看不到它,因为当我打电话时

response = urllib2.urlopen(request)
Run Code Online (Sandbox Code Playgroud)

我没有添加原始文本(因为JavaScript在客户端中执行).

所以,我正在寻找一些解决这个问题的想法.

python python-2.x web-scraping urlopen

154
推荐指数
12
解决办法
20万
查看次数

Python检查网站是否存在

我想检查某个网站是否存在,这就是我正在做的事情:

user_agent = 'Mozilla/20.0.1 (compatible; MSIE 5.5; Windows NT)'
headers = { 'User-Agent':user_agent }
link = "http://www.abc.com"
req = urllib2.Request(link, headers = headers)
page = urllib2.urlopen(req).read() - ERROR 402 generated here!
Run Code Online (Sandbox Code Playgroud)

如果页面不存在(错误402,或其他任何错误),我该怎么做page = ...才能确保我正在阅读的页面退出?

html python urlopen

50
推荐指数
7
解决办法
9万
查看次数

如何使用Python urlopen获取非ascii url?

我需要从带有非ascii字符的URL获取数据,但urllib2.urlopen拒绝打开资源并引发:

UnicodeEncodeError: 'ascii' codec can't encode character u'\u0131' in position 26: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)

我知道URL不符合标准,但我没有机会改变它.

什么是访问由包含使用Python非ASCII字符的URL指向的资源的方式吗?

编辑:换句话说,可以/如何urlopen打开一个URL,如:

http://example.org/Ñöñ-Å?Ç??/
Run Code Online (Sandbox Code Playgroud)

python unicode urllib2 non-ascii-characters urlopen

37
推荐指数
7
解决办法
3万
查看次数

在Python中解析HTTP响应

我想操纵这个网址上的信息.我可以成功打开它并阅读其内容.但我真正想要做的就是抛弃我不想要的所有东西,并操纵我想要保留的东西.

有没有办法将字符串转换为字典,以便我可以迭代它?或者我只需按原样解析它(str类型)?

from urllib.request import urlopen

url = 'http://www.quandl.com/api/v1/datasets/FRED/GDP.json'
response = urlopen(url)

print(response.read()) # returns string with info
Run Code Online (Sandbox Code Playgroud)

api json dictionary urlopen python-3.x

29
推荐指数
3
解决办法
9万
查看次数

在Python 2.6之前的版本中,urllib2.urlopen()的超时

urllib2的文件说,超时参数是在Python 2.6增加.不幸的是,我的代码库已经在Python 2.5和2.4平台上运行.

有没有其他方法来模拟超时?我想要做的就是让代码在一段固定的时间内与远程服务器通话.

也许任何替代内置库?(不要像pycurl那样安装第三方)

python urllib2 urlopen

28
推荐指数
1
解决办法
2万
查看次数

如何在python中使用urllib2加速获取页面?

我有一个脚本,可以获取多个网页并解析信息.

(可以在http://bluedevilbooks.com/search/?DEPT=MATH&CLASS=103&SEC=01上看到一个例子)

我在它上面运行了cProfile,而且正如我所假设的那样,urlopen占用了大量的时间.有没有办法更快地获取页面?或者一种方法一次获取几个页面?我会做最简单的事情,因为我是python和web开发的新手.

提前致谢!:)

更新:我有一个调用的函数fetchURLs(),我用它来制作一个我需要的URL数组,如下所示urls = fetchURLS().这些URL是来自亚马逊和eBay API的所有XML文件(这让我很困惑,为什么加载需要这么长时间,也许我的虚拟主机很慢?)

我需要做的是加载每个URL,读取每个页面,并将该数据发送到脚本的另一部分,该部分将解析和显示数据.

请注意,在获取所有页面之前,我无法执行后一部分,这就是我的问题所在.

另外,我相信我的主机一次限制我25个进程,所以服务器上最简单的任何东西都会很好:)


这是时间:

Sun Aug 15 20:51:22 2010    prof

         211352 function calls (209292 primitive calls) in 22.254 CPU seconds

   Ordered by: internal time
   List reduced from 404 to 10 due to restriction <10>

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
       10   18.056    1.806   18.056    1.806 {_socket.getaddrinfo}
     4991    2.730    0.001    2.730    0.001 {method 'recv' of '_socket.socket' objects}
       10    0.490    0.049    0.490    0.049 {method 'connect' of '_socket.socket' objects} …
Run Code Online (Sandbox Code Playgroud)

python time urllib2 cprofile urlopen

27
推荐指数
3
解决办法
2万
查看次数

使用urlopen.read中的"byte-like object"和JSON?

只是试图测试非常简单的Python JSON命令,但我遇到了一些麻烦.

urlopen('http://www.similarsitesearch.com/api/similar/ebay.com').read()
Run Code Online (Sandbox Code Playgroud)

应该输出

'{"num":20,"status":"ok","r0":"http:\\/\\/www.propertyroom.com\\/","r1":"http:\\/\\/www.ubid.com\\/","r2":"http:\\/\\/www.bidcactus.com\\/","r3":"http:\\/\\/www.etsy.com\\/","r4":"http:\\/\\/us.ebid.net\\/","r5":"http:\\/\\/www.bidrivals.com\\/","r6":"http:\\/\\/www.ioffer.com\\/","r7":"http:\\/\\/www.shopgoodwill.com\\/","r8":"http:\\/\\/www.beezid.com\\/","r9":"http:\\/\\/www.webidz.com\\/","r10":"http:\\/\\/www.auctionzip.com\\/","r11":"http:\\/\\/www.overstock.com\\/","r12":"http:\\/\\/www.bidspotter.com\\/","r13":"http:\\/\\/www.paypal.com\\/","r14":"http:\\/\\/www.ha.com\\/","r15":"http:\\/\\/www.onlineauction.com\\/","r16":"http:\\/\\/bidz.com\\/","r17":"http:\\/\\/www.epier.com\\/","r18":"http:\\/\\/www.sell.com\\/","r19":"http:\\/\\/www.rasmus.com\\/"}'
Run Code Online (Sandbox Code Playgroud)

但我得到了相同的字符串,b前面有一个字符串:

b'{"num":20,"status":"ok","r0":"http:\\/\\/www.propertyroom.com\\/","r1":"http:\\/\\/www.ubid.com\\/","r2":"http:\\/\\/www.bidcactus.com\\/","r3":"http:\\/\\/www.etsy.com\\/","r4":"http:\\/\\/us.ebid.net\\/","r5":"http:\\/\\/www.bidrivals.com\\/","r6":"http:\\/\\/www.ioffer.com\\/","r7":"http:\\/\\/www.shopgoodwill.com\\/","r8":"http:\\/\\/www.beezid.com\\/","r9":"http:\\/\\/www.webidz.com\\/","r10":"http:\\/\\/www.auctionzip.com\\/","r11":"http:\\/\\/www.overstock.com\\/","r12":"http:\\/\\/www.bidspotter.com\\/","r13":"http:\\/\\/www.paypal.com\\/","r14":"http:\\/\\/www.ha.com\\/","r15":"http:\\/\\/www.onlineauction.com\\/","r16":"http:\\/\\/bidz.com\\/","r17":"http:\\/\\/www.epier.com\\/","r18":"http:\\/\\/www.sell.com\\/","r19":"http:\\/\\/www.rasmus.com\\/"}'
Run Code Online (Sandbox Code Playgroud)

随后,当我试着跑

json.loads(urlopen('http://similarsitesearch.com/api/similar/ebay.com').read())
Run Code Online (Sandbox Code Playgroud)

它给了我错误信息:

TypeError:不能在类字节对象上使用字符串模式"

我假设与之有关b

urlopen从中导入urllib.request,我正在运行Python 3.

有任何想法吗?

python urlopen python-3.x

26
推荐指数
4
解决办法
2万
查看次数

python urllib2 urlopen响应

python urllib2 urlopen响应:

<addinfourl at 1081306700 whose fp = <socket._fileobject object at 0x4073192c>>
Run Code Online (Sandbox Code Playgroud)

预期:

{ "令牌": "mYWmzpunvasAT795niiR"}

python urllib2 urlopen

19
推荐指数
1
解决办法
3万
查看次数

Python 3.5.1 urllib没有属性请求

我试过了

import urllib.request
Run Code Online (Sandbox Code Playgroud)

要么

import urllib
Run Code Online (Sandbox Code Playgroud)

我的urllib的路径是 /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/urllib/__init__.py

我想知道urlopen在哪里,或者我的python模块指向错误的文件?

python urllib urlopen python-3.x

16
推荐指数
4
解决办法
3万
查看次数