这是由luminati.io提供的API,是一个高级代理提供者。然而,它返回的是字节码而不是字典,因此需要将其转换为字典以便能够提取ip
和port
:
每个请求都会使用新的对等代理,因为IP会在每个请求中轮换。
import csv
import requests
import json
import time
#!/usr/bin/env python
print('If you get error "ImportError: No module named \'six\'"'+\
'install six:\n$ sudo pip install six');
import sys
if sys.version_info[0]==2:
import six
from six.moves.urllib import request
opener = request.build_opener(
request.ProxyHandler(
{'http': 'http://lum-customer-hl_1247574f-zone-static:lnheclanmc@127.0.3.1:20005'}))
proxy_details = opener.open('http://lumtest.com/myip.json').read()
if sys.version_info[0]==3:
import urllib.request
opener = urllib.request.build_opener(
urllib.request.ProxyHandler(
{'http': 'http://lum-customer-hl_1247574f-zone-static:lnheclanmc@127.0.3.1:20005'}))
proxy_details = opener.open('http://lumtest.com/myip.json').read()
proxy_dictionary = json.loads(proxy_details)
print(proxy_dictionary)
接下来我计划使用requests模块中的ip
和port
连接到所需的网站:
headers = {'USER_AGENT': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:63.0) Gecko/20100101 Firefox/63.0'}
if __name__ == "__main__":
search_keyword = input("Enter the search keyword: ")
page_number = int(input("Enter total number of pages: "))
for i in range(1,page_number+1):
time.sleep(10)
link = 'https://www.experiment.com.ph/catalog/?_keyori=ss&ajax=true&from=input&page='+str(i)+'&q='+str(search_keyword)+'&spm=a2o4l.home.search.go.239e6ef06RRqVD'
proxy = proxy_dictionary["ip"] + ':' + str(proxy_dictionary["asn"]["asnum"])
print(proxy)
req = requests.get(link,headers=headers,proxies={"https":proxy})
但是我的问题在于当执行 requests
时出现了错误。当我将 proxies={"https":proxy}
更改为 proxies={"http":proxy}
时,有一次可以连接成功,但除此之外,代理无法连接。
print_dictionary = {'ip': '84.22.151.191', 'country': 'RU', 'asn': {'asnum': 57129, 'org_name': 'Optibit LLC'}, 'geo': {'city': 'Krasnoyarsk', 'region': 'KYA', 'postal_code': '660000', 'latitude': 56.0097, 'longitude': 92.7917, 'tz': 'Asia/Krasnoyarsk'}}
print(proxy)
将会得到84.22.151.191:57129
,并被传递给requests.get
方法
我收到的错误:
(Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x00000282DDD592B0>: Failed to establish a new connection: [WinError 10061] No connection could be made because the target machine actively refused it',)))
我测试了一下requests
方法中删除proxies={"https":proxy}
参数后,爬取工作正常进行。因此,代理存在问题或者我访问代理的方式有误。
@127.0.3.3.1:20005
是我的应用程序用来连接Luminati Proxy Manager
的,然后他们会返回一个peer proxy
,即84.22.151.191:57129:57129
,我会用它来连接并爬取感兴趣的网站。由于我定义了proxy = proxy_dictionary["ip"] + ':' + str(proxy_dictionary["asn"]["asnum"])
,所以proxies={"https":proxy}
就是proxies={"https":84.22.151.191:57129}
。你的意思是必须是proxies={"https":"https://84.22.151.191:57129"}
吗? - Pherdindy'http': 'http://lum-customer-hl_1247574f-zone-static:lnheclanmc@127.0.3.1:20005'
进行连接,因为我已更改详细信息,以便使用我的用户名和密码访问该服务。 - Pherdindyproxies={"https":"https://84.22.151.191:57129"}
的格式,但是出现了相同的错误。 - Pherdindy