网页爬虫 - Python 爬虫调用 requests 如何设置代理(GoAgent/GoAgentX)?

 星仔star-powerbz 发布于 2022-11-04 22:22

空壳代码:

# -*- utf-8 -*-
import requests

s = requests.session()
login_data = {'email': 'myEmail', 'password': 'psw'}
s.post('https://www.facebook.com/', login_data)
r = s.get('http://www.facebook.com/people/someone/followers')
print r.text.encode('utf-8')

稍加修改就能在知乎上爬数据,但无法对facebook使用

requests如何设置代理?

OS X GoAgentX 全局代理

根据码友的提示:

import requesocks as requests

session = requests.session()

session.proxies = {'http': 'socks5://127.0.0.1:8087',
                   'https': 'socks5://127.0.0.1:8087'}
resp = session.get('https://www.facebook.com/', auth=('myEmail', 'psw'))

print(resp.text)
2 个回答
  • 早上起来过来看看. 还是没解决啊.

    你这个问题如我在我评论提示的, "http://127 改成 socks5://127 试下", 这个goagent其实是socks5的代理类型,而requests不支持socks5.

    原本以为requests已经打了这个补丁, https://github.com/kennethreitz/requests/pull/478
    没想到最新版2.3还是不支持.

    有个workaround.
    我这边没goagent,用的是 ssh -qTfnN -D 1234 root@myip. 不过都一样啦
    安装这个东西 pip install PySocks

    # -*- utf-8 -*-
    import requests
    import socket
    import socks
    socks.set_default_proxy(socks.SOCKS5, "127.0.0.1",1234)
    socket.socket = socks.socksocket
    
    r = requests.get('http://www.telize.com/geoip')
    print r.text.encode('utf-8')
    


    希望下次提问题时能尽可能提供更多的信息. "不行"是最糟糕的描述, 起码附上python错误提示吧

    2022-11-12 01:45 回答
  • 要确定你的代理是可用的,我用的是Goagent,下面的代码测试通过了.

    #!/usr/bin/env python2.7
    # -*- utf-8 -*-
    
    import requests
    import re
    
    s = requests.Session()
    
    proxies = {
            'http': 'http://127.0.0.1:8087',
            'https': 'http://127.0.0.1:8087',
    }
    
    login_data = {
            'email': 'youxiassssssssssssssssssssssss@163.com',
            'pass': 'mima',
    }
    
    r = s.get('https://www.facebook.com/login.php?login_attempt=1', proxies=proxies, verify=False)
    
    lgm = re.search('name="lgnrnd" value="([^"]+)"', r.content, re.I | re.S)
    lsm = re.search('name="lsd" value="([^"]+)"', r.content, re.I | re.S)
    if lgm is None or lsm is None:
        print 'cannot get form param: lgnrnd or lsd'
    else:
        login_data.update({'lgnrnd': lgm.group(1), 'lsd': lsm.group(1)})
    
        l = s.post('https://www.facebook.com/login.php?login_attempt=1', params=login_data, proxies=proxies, verify=False)
        m = re.search('sk=welcome', l.content, re.I | re.S)
        if m is not None:
            print 'login success.'
        else:
            print 'login failed.'
    
    
    2022-11-12 01:45 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有