关于python和jQuery爬坑的点滴

前言:这里使用的python3

一.关于访问网页的方法

1.用urllib访问。

import urllib
import urllib.request


def test(message=None):
    e = message.encode()
    # 把字符串作为 URI 进行编码
    msg = urllib.parse.quote(e)
    # 这个模块的主要作用就是通过引入合适编码和特殊字符对URL进行安全重构,并且可以反向解析。
    url = 'http://xxxx.xx?t=0&w=' + msg

    html = get_Html(url)

    string = html.decode()
    # 以gb2312编码对字符串str进行解码,获得字符串类型对象


def get_Html(m_url):
    page = urllib.request.urlopen(m_url)
    # urlopen返回的是一个HTTPResponse对象
    html = page.read()
    return html


if __name__ == "__main__":
    test()

这种方法也适用用于python3,不过不太建议使用,用法比较复杂。

2.用requests

import requests


def test():
    
    url = 'http://xxxx.xx?'
    #访问的地址
    data = {}
    #需要提交的数据
    headers = {}
    #headers相关,如UA,或者验证。cookies
    s = requests.session()

    response = s.post(url=url, data=data, headers=headers)
    
    print(response.status_code)


if __name__ == "__main__":
    test()

推荐使用这种方法,简单明了。

 

二,关于status_code的一些坑

1.status_code=400

①、语义有误,当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交这个请求。
②、请求参数有误。

这种问题主要是提交数据或表单的格式不对,服务器无法识别。我遇到的问题是服务器需要的是json格式,但是在python还是其他语言写成下面这样依旧出现400的问题。需要增加json.dumps()把json格式的字符串转变成为json格式的对象。

data={
                "id": "123456",
                "msg":"iread",
                "url": "xxx.xxx"
            }
data=json.dumps(data)

在js或jq中需要使用JSON.stringify才可以。

JSON.stringify({
                "id": "123456",
                "msg":"iread",
                "url": "xxx.xxx" }),

这样就解决了400的问题。

 

2.status_code=401

当前请求需要用户验证。该响应必须包含一个适用于被请求资源的 WWW-Authenticate 信息头用以询问用户信息。客户端可以重复提交一个包含恰当的 Authorization 头信息的请求。如果当前请求已经包含了 Authorization 证书,那么401响应代表着服务器验证已经拒绝了那些证书。如果401响应包含了与前一个响应相同的身份验证询问,且浏览器已经至少尝试了一次验证,那么浏览器应当向用户展示响应中包含的实体信息,因为这个实体信息中可能包含了相关诊断信息。参见RFC 2617。

这里主要是 Authorization 证书的问题,这类证书一般需要签证,一次签证或多次签证。

在python请求页面的时候直接放到headers里面就可以。

但是在js或者jq使用ajax请求的时候,直接添加Authorization 会出现401错误。这时候需要使用到一个beforeSend: function(xhr){xhr.setRequestHeader(‘Authorization’,”),具体意思是在发送请求前先发送验证信息到服务器验证。

具体:

 $.ajax({
                      type: 'POST',
                      beforeSend: function(xhr){xhr.setRequestHeader('Authorization', '验证信息');},
                      url: '请求地址',
                      contentType: "application/json",
                      data: data,
                      success:
                  
                    });

3.status_code=500

服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器端的源代码出现错误时出现。

请认真无视上面的解释,顺便加一个:自己电脑或服务器的NDS解析错误。

具体解决问题的方法:手动设置NDS.

这里不得不吐槽,500在我访问自己写的网页的时候经常出现,理论一般是服务器或网页源码错误。但我在用自己的电脑时候能访问,到了服务器就不能访问了,还以为是我的python版本不行,都卸载了好多会。浪费了我超多时间。

 

 

 

加入讨论

电子邮件地址不会被公开。 必填项已用*标注