zoukankan      html  css  js  c++  java
  • 解决爬虫浏览器中General显示 Status Code:304 NOT MODIFIED,而在requests请求时出现403被拦截的情况。

    在此,非常感谢 “完美风暴4” 的无私共享经验的精神
     
     在Python爬虫爬取网站时,莫名遇到 浏览器中General显示 
    Status Code:
    304 NOT MODIFIED

    而在requests请求时出现403被拦截的情况。下面转自 “完美风暴4” 的博客解决办法。

    在python写爬虫的时候,html.getcode()会遇到403禁止访问的问题,这是网站对自动化爬虫的禁止,要解决这个问题,需要用到python的模块urllib2模块


    urllib2模块是属于一个进阶的爬虫抓取模块,有非常多的方法

    比方说连接url=http://blog.csdn.net/qysh123

    对于这个连接就有可能出现403禁止访问的问题

    解决这个问题,需要以下几步骤:

    [python] view plain copy
    1. <span style="font-size:18px;">req = urllib2.Request(url)  
    2. req.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36")  
    3. req.add_header("GET",url)  
    4. req.add_header("Host","blog.csdn.net")  
    5. req.add_header("Referer","http://blog.csdn.net/")</span>  

     其中User-Agent是浏览器特有的属性,通过浏览器查看源代码就可以查看到

    然后html=urllib2.urlopen(req)

    print html.read()

    就可以把网页代码全部下载下来,而没有了403禁止访问的问题。


    对于以上问题,可以封装成函数,供以后调用方便使用,具体代码:

     pasting

    1. #-*-coding:utf-8-*-  
    2.   
    3. import urllib2  
    4. import random  
    5.   
    6. url="http://blog.csdn.net/qysh123/article/details/44564943"  
    7.   
    8. my_headers=["Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36",  
    9. "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36",  
    10. "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0"  
    11. "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/537.75.14",  
    12. "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0)"  
    13.       
    14. ]  
    15. def get_content(url,headers):  
    16.     ''''' 
    17.     @获取403禁止访问的网页 
    18.     '''  
    19.     randdom_header=random.choice(headers)  
    20.   
    21.     req=urllib2.Request(url)  
    22.     req.add_header("User-Agent",randdom_header)  
    23.     req.add_header("Host","blog.csdn.net")  
    24.     req.add_header("Referer","http://blog.csdn.net/")  
    25.     req.add_header("GET",url)  
    26.   
    27.     content=urllib2.urlopen(req).read()  
    28.     return content  
    29.   
    30. print get_content(url,my_headers)  
    其中用到了random随机函数,自动获取已经写好的浏览器类型的User-Agent信息,在自定义函数中需要写出自己的Host,Referer,GET信息等,解决这几个问题,就可以顺利访问了,不再出现403访问的信息。

    pasting

    当然如果访问频率过快的话,有些网站还是会过滤的,解决这个需要用到代理IP的方法。。。具体的自己解决

  • 相关阅读:
    解决chrome浏览器自动填充密码
    linux top命令详解
    经纬度互换、换算成米、两点的经纬度计算两点间的距离
    js 调用声音提示
    centos7 kdump.service启动失败的解决方法
    Postman 工具模拟Ajax请求
    CentOs7 安装最新版的Git
    Nginx日志切割之Logrotate篇
    mysql让主键id重新排序
    阿里云大文件解压函数计算
  • 原文地址:https://www.cnblogs.com/fanjp666888/p/8403745.html
Copyright © 2011-2022 走看看