V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
sidkang
V2EX  ›  Python

请教一个 requests 的爬虫问题,同样的代码在本地和云主机上一个成功一个失败

  •  
  •   sidkang · 2017-09-22 18:35:23 +08:00 · 2973 次点击
    这是一个创建于 2609 天前的主题,其中的信息可能已经有所发展或是发生改变。

    PY 新手向各位请教一个问题, 目前的情况: 1、在本地进行 POST 操作,状态返回 503,失败; 2、在云主机运行同样操作,状态成功,取回所需数据; 3、在本地浏览器中直接输入 url 以及参数,状态成功,取回所需数据; 已经排除了 cookie, headers, user-agent 方面的问题

    我的问题是: 1、如果网站是以 ip 作为返回 503 的依据,是不是本地浏览器网页中也一定会 503 ? 2、如果不是第 1 种问题的话,还有什么会使得我在本地运行代码会 503 呢?

    提前谢谢大家。

    第 1 条附言  ·  2017-09-23 00:02:52 +08:00
    headers = {'Host': 'www.creditchina.gov.cn',
    			'Content-Length': '119',
               'X-Requested-With': 'XMLHttpRequest',
               'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36",
               'DNT': '1',
               'Cache-Control': 'max-age=0'
               }
               
               payload = {'t': '1506062526183',
               'keyword': '光大',
               'searchtype': '0',
               'objectType': '2',
               'areas': '',
               'creditType': '',
               'dataType': '1',
               'areaCode': '',
               'templateId': '',
               'exact': '0',
               'page': '1'
               }
    
    result = requests.post('http://www.creditchina.gov.cn/credit_info_search?', headers=headers, params=payload)
    

    以上是代码,get版的完整url是http://www.creditchina.gov.cn/credit_info_search?t=1506062526183&keyword=%E5%85%89%E5%A4%A7&searchtype=0&objectType=2&areas=&creditType=&dataType=1&areaCode=&templateId=&exact=0&page=1

    很奇怪,回到家运行代码还是503,囧....实在搞不清哪里有问题...

    14 条回复    2017-09-23 10:37:29 +08:00
    954880786
        1
    954880786  
       2017-09-22 19:30:29 +08:00 via iPhone
    你是不是爬多了自己的 ip 被网站 ban 了
    wjm2038
        2
    wjm2038  
       2017-09-22 19:33:29 +08:00 via Android
    顺便确定是 post 不是 get 么。。。
    sidkang
        3
    sidkang  
    OP
       2017-09-22 21:58:23 +08:00 via iPhone
    @954880786 我也有这个疑问,但是我确实可以网页打开链接,就比较纳闷,难道还可以针对某个 IP 区分 post 和 get 么,只屏蔽 post,不屏蔽 get.....
    sidkang
        4
    sidkang  
    OP
       2017-09-22 21:59:17 +08:00 via iPhone
    @wjm2038 确认过了,晚些我把代码贴出来,囧
    ik
        5
    ik  
       2017-09-22 22:22:16 +08:00 via iPhone
    楼主先交代一下是不是使用的 N 级运营商的那种野宽带?
    说一个自己的经历,野宽带,到处流量穿透那种,访问线上接口(这个接口提供 http 方式访问,也可以使用 java 的一些方法调用[可能没说清楚,反正不是 http 方式调用,我只是个小运维而已。。。]),http 方式和 java 调用显示的来源地址只在同一个 C 段,但不一样。 并不是出口 IP 随机,而是同一种访问方式,出口 IP 是一样的…

    我也不知道描述清楚了没有
    ik
        6
    ik  
       2017-09-22 22:23:18 +08:00 via iPhone
    上面的理论 + 1L 的说法
    misaka20038numbe
        7
    misaka20038numbe  
       2017-09-22 22:26:30 +08:00
    有些网站不允许同时有 get 和 post,有些网站需要 https
    sidkang
        8
    sidkang  
    OP
       2017-09-23 00:06:57 +08:00
    @ik 宽带应该没问题啊,电信联通的,况且回到家也没问题....

    @misaka20038numbe 这个网站倒是没上 https,http://www.creditchina.gov.cn/home 我想做的应该就是模拟“搜索一下”这个按钮的事情吧,抓下来应该是 POST 的动作啊..
    sidkang
        9
    sidkang  
    OP
       2017-09-23 00:08:02 +08:00
    @ik 说错了,应该是回到家也不成功,是不是我直接应该试试 GET 加参数....
    zhengjian
        10
    zhengjian  
       2017-09-23 01:27:30 +08:00   ❤️ 1
    ```
    import requests


    headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36',
    }

    params = (
    ('keyword', '光大'),
    )

    r = requests.get('http://www.creditchina.gov.cn/credit_info_search', headers=headers, params=params)

    print(r.json())

    ```
    sidkang
        11
    sidkang  
    OP
       2017-09-23 02:00:53 +08:00
    @zhengjian 泪流满面,原来 headers 加多了也会被屏蔽啊....
    regicide
        12
    regicide  
       2017-09-23 08:48:06 +08:00 via iPhone
    别抓信用中国了 数据不全漏的也厉害
    kltt22
        13
    kltt22  
       2017-09-23 09:58:20 +08:00
    'Content-Length': '119'这个不该是算出来的吗?
    sidkang
        14
    sidkang  
    OP
       2017-09-23 10:37:29 +08:00
    @regicide 光这一家确实不太够,就算是查漏补缺吧,正好也是从易到难练习爬虫...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5346 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 07:00 · PVG 15:00 · LAX 23:00 · JFK 02:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.