美文网首页大数据 爬虫Python AI SqlPython小哥哥
Python-数据挖掘-请求伪装!伪装是非常重要的一环!

Python-数据挖掘-请求伪装!伪装是非常重要的一环!

作者: 14e61d025165 | 来源:发表于2019-03-17 15:28 被阅读3次

    对于一些需要登录的网站,如果不是从浏览器发出的请求,是不能获得响应内容。这种情况,需要将爬虫程序发出的请求伪装成一个从浏览器发出的请求。伪装浏览器需要自定义请求报头,也就是在发送 Request 请求时,加入特定的 Headers。

    欢迎大家加入小编创建的Python行业交流群,有大牛答疑,有资源共享,有企业招人!是一个非常不错的交流基地!群号:683380553

    添加特定的 Headers 的方式,只需要调用 Request.add_header() 即可。如果想要查看已有的 Headers,可以通过调用 Request.get_header() 查看。

    importurllib.requesturl ="http://www.baidu.com/"user_agent = {"User-Agent":"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT6.1; Trident/5.0)"}request = urllib.request.Request(url, headers=user_agent)request.add_header("Connection","keep-alive")response = urllib.request.urlopen(request)print(response.code)html = response.read()print(html)

    一、代理服务器

    很多网站会检查某一个段时间某个 IP 的访问次数,如果同一 IP 访问过于频繁,那么该网站会禁止来自该 IP 的访问。

    这种情况,可以使用代理服务器,每隔一段时间换一个代理。如果某个 IP 被禁止,可以换成其它 IP 继续爬取数据。

    ① 定义 opener

    opener 是 urllib.request.OpenerDirector 类的对象,urlopen 就是模块构建的一个 opener,但是它不支持代理、Cookie 等其它的 HTTP/HTTPS 高级功能。如果设置代理,不能使用自带的 urlopen,而是要自定义opener。

    使用相关的 Handler 处理器创建特定功能的处理器对象。

    通过 urllib.request.build_opener() 方法使用这些处理器对象创建自定义到的 opener 对象。

    使用自定义的 opener 对象,调用 open() 方法发送请求。这里需要注意的是,如果程序中所有的请求都使用自定义的 opener,可以使用 urllib2.install_opener() 将自定义的 opener 对象定义为全局 opener,表示之后凡是调用 urlopen,都将使用自定义的 opener。

    importurllib.request# 构建一个HTTPHandler处理器对象,支持处理HTTP请求http_handler = urllib.request.HTTPHandler()# 调用 urllib2.build_opener() 方法,创建支持处理HTTP请求的 opener 对象opener = urllib.request.build_opener(http_handler)# 构建Request请求request = urllib.request.Request("http://www.baidu.com/")# 调用自定义 opener 对象的open() 方法,发送 request 请求response = opener.open(request)# 获取服务器响应内容print(response.read())

    ② 设置代理服务器

    可以使用 urllib.request 中的 ProxyHandler() 方法来设置代理服务器。

    使用自定义 opener 来设置代理服务器:

    importurllib.request# 构建了两个代理Handler,一个有代理IP,一个没有代理IPhttpproxy_handler = urllib.request.ProxyHandler({"http":"47.104.14.43"})nullproxy_handler = urllib.request.ProxyHandler({})# 定义一个代理开关proxy_switch =Trueifproxy_switch:  opener = urllib.request.build_opener(httpproxy_handler)else:  opener = urllib.request.build_opener(nullproxy_handler)request = urllib.request.Request("http://www.baidu.com/")response = opener.open(request)print(response.read())

    相关文章

      网友评论

        本文标题:Python-数据挖掘-请求伪装!伪装是非常重要的一环!

        本文链接:https://www.haomeiwen.com/subject/tjjumqtx.html