代码之家  ›  专栏  ›  技术社区  ›  zerohedge

python在Pythonywhere上请求奇怪的错误

  •  1
  • zerohedge  · 技术社区  · 8 年前

    因此,当我在本地机器上以PyCharm/from-shell脚本运行以下代码时,它可以完美地工作:

    # -*- coding: utf-8 -*-
    
    import requests
    from lxml import etree, html
    import chardet
    
    def gimme_pairs():
    
        url = "https://halbidoncom/sha.xml"
        page = requests.get(url).content
        encoding = chardet.detect(page)['encoding']
    
        if encoding != 'utf-8':
            page = page.decode(encoding, 'replace').encode('utf-8')
    
        doc = html.fromstring(page, base_url=url)
        print(doc)
        print(page)
        wanted = doc.xpath('//location')
    
        print(wanted)
    
        date_list = None
        tashkif_list = None
    
        for elem in wanted:
            date_list = elem.xpath('locationdata/timeunitdata/date/text()')
            tashkif_list = elem.xpath('locationdata/timeunitdata/element/elementvalue/text()')
    

    但是在Pythonywhere上我得到了这个输出 doc :

    必须启用才能查看此 页“;\n\n\n函数测试(var1)\n{\n\tvar var_str=“”挑战;\n\tvar var\u arr=var\u str.split(“”);\n\tvar LastDig=var _arr.reverse()[0];\n\tvar minDig=var\u arr.sort()[0];\n\tvar subvar1=(2*(var\u arr[2])+(var\u arr[1]*1);\n\tvar subvar2=(2*var\u arr[2])+v ar_arr[1];\n\tvar 1.\n\tvar y=数学。cos(数学PI nswer=x*y;\n\tanswer-=my\u pow*1;\n\tanswer+=(minDig*1)-(LastDig*1);\n\t答案=答案+子变量2;\n\t返回 答复\n} \n\n\n li ent=null;\nif公司 XMLHttpRequest();\n} \nelse\n{\n\tif (window.ActiveXObject)\n\t{\n\t\t客户端=新建 ActiveXObject(\'MSXML2.XMLHTTP.3.0\');\n\t};\n} \n如果 修正。write(“并非所有需要的JavaScript方法都是 支持。
    ((MyCookie==null)| |(MyCooki) cookieName=MyCookie。拆分(\'=\')[0];\n\t\t\t如果 n\t\t\t}\n\t\t\t\t删除。地方重新加载(true);\n\t\t}\n\t};\n\ty=测试(挑战);\n\t客户端。打开(“POST”,窗口。位置,true);\n\t客户端。设置 RequestHeader(\'X-AA-Challenge-ID \', AA挑战\',挑战);\n\t客户端。setRequestHeader(\'Content-Type' ,\'text/plain\');\n\t客户端。send();\n} \n\n\n\ 页\n\n'

    • 正在交换对urllib的请求。打开()
    • 手动添加标题
    • 升级到PA premium帐户

    有什么好处?让我印象深刻的是,请求在我的机器和他们的机器上应该具有相同的功能。

    1 回复  |  直到 8 年前
        1
  •  3
  •   Gavin Clark    8 年前

    看起来你试图刮取的服务器有保护,以确保你使用的是真正的浏览器/请求背后有人。如果你很好地格式化了这个响应,你会看到它使用 Challenge ChallengeId

    我假设Pythonywhere使用的IP/服务器已经被服务器所有者添加到一个列表中,以阻止请求(可能过去真的有人向它们发送垃圾邮件?)

    https://github.com/niryariv/opentaba-server/

    他们检查挑战: https://github.com/niryariv/opentaba-server/blob/master/lib/mavat_scrape.py#L31 https://github.com/niryariv/opentaba-server/blob/master/lib/helpers.py#L109