找回密码
 立即注册
搜索
查看: 2424|回复: 12

[软件] python爬需要代理服务器访问的网页什么方案比较好

[复制链接]
     
发表于 2023-4-21 21:12 | 显示全部楼层 |阅读模式
上网抄了一段代码,代理是用ssr,发现没法抓下来urllib.error.URLError: <urlopen error [WinError 10054] 远程主机强迫关闭了一个现有的连接。>



  1. from urllib import request
  2. from urllib import parse

  3. data = {
  4.         'first': 'true',
  5.         'pn': 1,
  6.         'kd': 'Python'
  7.     }
  8.    
  9.    
  10. url = "https://网站"   
  11. proxy = request.ProxyHandler({'http':'127.0.0.1:1080'})  # 设置proxy
  12. opener = request.build_opener(proxy)  # 挂载opener
  13. request.install_opener(opener)  # 安装opener
  14. data = parse.urlencode(data).encode('utf-8')
  15. page = opener.open(url, data).read()
  16. page = page.decode('utf-8')
复制代码


回复

使用道具 举报

     
发表于 2023-4-21 21:23 | 显示全部楼层
路由器上开
回复

使用道具 举报

     
发表于 2023-4-21 21:50 | 显示全部楼层
嗯哼喵,看起来你的代理服务器出了些问题的样子。我看你这段代码基本上是没有问题的,应该是代理的问题。可能是ssr有些设置不对或者被封了吧。你可以试试换一个别的代理服务器喵,或者直接使用requests库,会更方便一些哦
回复

使用道具 举报

     
发表于 2023-4-21 21:51 | 显示全部楼层
本帖最后由 Archaeopteryx 于 2023-4-21 22:24 编辑

编辑一下以免误导人。因为不知道你的目标网站是啥所以我只试了百度可以成功连接。主楼里连接错误有可能有别的原因,建议先试试别的网站,排除proxy设置方面的问题。

###########################################

我这里可以运行的。可能是你缺了某些组件,试试


  1. pip install pysocks
  2. pip install -U requests[socks]
复制代码

回复

使用道具 举报

     
发表于 2023-4-21 22:10 | 显示全部楼层
用urllib写对我来说太硬核了,我觉得只是自己偶然用用的话,用playwright之类比较方便点,一些简单的问题也更直观
回复

使用道具 举报

     
发表于 2023-4-21 22:47 | 显示全部楼层
本帖最后由 wangyi041228 于 2023-4-21 22:49 编辑

比较常见的是10080端口,是不是抄错了?WinError是概率事件, 大量爬取无法避免,建议while true: try ... break except包起来
另外推荐aiohttp,或者用简单包装的ez-aio。

定义:
get(urls, binary=False, func=None, fdata=None, li=99, forced=True, ssl=False,  proxy=None, headers=None, cookies=None):
post略

例子:
urls = ['https://www.baidu.com'] * 100
results = aio.get(urls,proxy=proxy)

https://pypi.org/project/ez-aio/
回复

使用道具 举报

头像被屏蔽
     
发表于 2023-4-21 22:53 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

     
发表于 2023-4-22 02:27 | 显示全部楼层
用requests吧

pip install -U 'requests[socks]'

import requests
socks_proxies = dict(http='socks5://user:pass@host:port',
                                 https='socks5://user:pass@host:port')
resp = requests.get('http://web',
                    proxies=socks_proxies)
print(resp.text)
回复

使用道具 举报

     
发表于 2023-4-22 08:45 来自手机 | 显示全部楼层
换个思路,你可以直接在国外的服务器上跑这个程序
回复

使用道具 举报

     
发表于 2023-4-22 09:12 | 显示全部楼层
代理要加上https,关闭ssl证书验证

—— 来自 S1Fun
回复

使用道具 举报

     
 楼主| 发表于 2023-4-22 09:45 | 显示全部楼层
糊状物 发表于 2023-4-21 22:10
用urllib写对我来说太硬核了,我觉得只是自己偶然用用的话,用playwright之类比较方便点,一些简单的问题也 ...

搞不来,先用playwright,好处是直接利用了全局代理,不用特意设置proxy参数也能用

缺点是偶尔还是会出现
playwright._impl._api_types.Error: net::ERR_CONNECTION_CLOSED at xxxxx
=========================== logs ===========================
navigating to "xxxxx", waiting until "load"
回复

使用道具 举报

     
发表于 2023-4-22 10:09 | 显示全部楼层
b0207191 发表于 2023-4-22 09:45
搞不来,先用playwright,好处是直接利用了全局代理,不用特意设置proxy参数也能用

缺点是偶尔还是会出 ...

不知道你爬的什么网站, 看错误信息感觉 要么是代理不稳定, 要么触发了对面的反爬保护.
回复

使用道具 举报

     
发表于 2023-4-22 10:33 | 显示全部楼层
b0207191 发表于 2023-4-22 09:45
搞不来,先用playwright,好处是直接利用了全局代理,不用特意设置proxy参数也能用

缺点是偶尔还是会出 ...

忘了说, 你playwright设置个headless=False, 直接显示浏览器, 这种错误直接看页面好了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|Stage1st ( 沪ICP备13020230号-1|沪公网安备 31010702007642号 )

GMT+8, 2024-9-21 14:26 , Processed in 0.061933 second(s), 5 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表