• 使用Python获取Wikipedia 的url时出现“ERR_ACCESS_DENIED”怎么办?


    最近想用中文维基百科的一些文章进行文本分析,于是想爬一些有用的网页下来。起初找了个叫teleport pro的软件,但几经周折还是没找到方法下载指定层的文本(图片可以),而且下下来很多没用的插件,甚是复杂(网上有人说可以实现,但至今未研究明白,还请高手指点!)。于是用python写了段代码获取指定url的网页。这也是第一次接触urllib等库的使用。

    代码如下(Linux 下 Python 2.6):

    1 # coding=utf-8
    2
    3 import urllib
    4
    5 url='http://zh.wikipedia.org/wiki/Wikipedia:%E5%84%AA%E8%89%AF%E6%A2%9D%E7%9B%AE'
    6 loca='/home/yxl/work/crawingpage/wiki.html'
    7
    8 urllib.urlretrieve(url,loca)

    但每次获得的网页都是无法进入该网页的错误信息,返回的网页内容如下:

    于是在网上找到了这样一个产生类似问题的帖子,解答说可以用urllib2 加上headers可以解决:

    于是我把代码修改后:

     1 # coding=utf-8
    2
    3 import urllib2
    4
    5 url='http://zh.wikipedia.org/wiki/Wikipedia:%E5%84%AA%E8%89%AF%E6%A2%9D%E7%9B%AE'
    6 loca='/home/yxl/work/crawingpage/wiki.html'
    7
    8 opener = urllib2.build_opener()
    9 opener.addheaders = [('User-agent', 'Mozilla/5.0')]
    10 urldata = opener.open(url)
    11 f=file(loca,'w')
    12 m=urldata.read()
    13 print>>f,m

    可以正确获取该网页了!哦耶!

    但是我仍然很困惑之前的程序到底是什么问题造成的?(尚未搞清楚,求高手赐教)

    urllib和urllib2到底什么区别呢?

    http://www.cnblogs.com/yuxc/archive/2011/08/01/2124073.html中介绍:

    Python:urllib 和urllib2之间的区别

     作为一个Python菜鸟,之前一直懵懂于urllib和urllib2,以为2是1的升级版。今天看到老外写的一篇《Python: difference between urllib and urllib2》才明白其中的区别。

     You might be intrigued by the existence of two separate URL modules in Python -urllib and urllib2. Even more intriguing: they are not alternatives for each other. So what is the difference between urllib and urllib2, and do we need them both? 

     你可能对于Python中两个独立存在的-urllib2和-urllib2感到好奇。更有趣的是:它们并不是可以相互代替的。那么这两个模块间的区别是什么,并且这两个我们都需要吗?


    urllib and  urllib2are both Python modules that do URL request related stuff but offer different functionalities. Their two most significant differences are listed below: 
    urllib 和urllib2都是接受URL请求的相关模块,但是提供了不同的功能。两个最显著的不同如下:

    • urllib2 can accept a Request object to set the headers for a URL request,urllib accepts only a URL. That means, you cannot masquerade your User Agent string etc.

    urllib2可以接受一个Request类的实例来设置URL请求的headers,urllib仅可以接受URL。这意味着,你不可以伪装你的User Agent字符串等。

     

     

    • urllib provides the urlencode method which is used for the generation of GET query strings, urllib2 doesn't have such a function. This is one of the reasons why urllib is often used along with urllib2.

    urllib提供urlencode方法用来GET查询字符串的产生,而urllib2没有。这是为何urllib常和urllib2一起使用的原因。

     
    For other differences between urllib and urllib2 refer to their documentations, the links are given in the References section. 
    Tip: if you are planning to do HTTP stuff only, check out httplib2, it is much better than httplib or urllib or urllib2. 
     提示:如果你仅做HTTP相关的,看一下httplib2,比其他几个模块好用。

     相关资料

    这里还有个类似的问答:urllib urllib2 what is the difference ?
     stackoverflow上也有:Should I use urllib or urllib2?
     

    Python Docs



  • 相关阅读:
    ubuntu16.04配置网卡
    如何让虚拟机的Ubuntu上网?
    sqlite错误 The database disk image is malformed database disk image is malformed 可解决
    Linux系统安装bcompare步骤及注意事项Linux系统安装bcompare步骤及注意事项
    用python做科学计算(一)C语言读取python生成的二进制文件
    ubuntu下的RapidSVN
    matplotlib常见问题总结
    MATLAB中的矩阵索引
    4.0 Lab1-CRC Generation(1)
    项目管理-人员配置
  • 原文地址:https://www.cnblogs.com/mlv5/p/2362783.html
Copyright © 2020-2023  润新知