怎么使用Python爬取代理IP验证有效性?

作者:IPIDEA

2022-10-11 10:59:04

在爬虫工作的过程中,往往是因为IP受到允许访问公开数据,无法继续下去,工程师们也很聪明,购买代理IP,自己搭建IP甚至在网上抓取免费代理IP。众所周知,网络上有很多免费代理。IP我们可以选择一个或多个网站作为代理IP爬取并存储csv通过多个过程验证文件中的爬行IP的可用性。

怎么使用Python爬取代理IP验证有效性?

通过requests和lxml爬取和分析网页。

在爬行之前,我们首先设置请求头,模拟普通浏览器访问网页。

headers={

accept:"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",

accept-encoding:"gzip,deflate",

accept-language:"zh-CN,zh;q=0.9",

cache-control:"no-cache",

connection:"keep-alive",

host:"www.******.com",

if-none-match:"W/\"61f3e567b1a5028acee7804fa878a5ba\"",

upgrade-insecure-requests:"1",

user-agent:"Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/64.0.3282.119Safari/537.36"

}

通过lxml的css选择一切ip拼接地址和端口,然后一行一行地写入csv文件中。

代码如下:

defgetProxyList(target_url=TARGET_URL,pages=1):

"""

爬取代理IP地址

:paramtarget_url:爬取的代理IP网址

:return:

"""

proxyFile=open(FILE_NAME,"a+",newline="")

writer=csv.writer(proxyFile)

r=requests.get(target_url+pages,headers=headers,timeout=2.5)

document_tree=lxml.html.fromstring(r.text)

rows=document_tree.cssselect("#ip_listtr")

rows.pop(0)

forrowinrows:

tds=row.cssselect("td")

proxy_ip=tds[1].text_content()

proxy_port=tds[2].text_content()

proxy_addr=tds[3].text_content().strip()

writer.writerow([proxy_ip,proxy_port,proxy_addr])

proxyFile.close()

设置爬行页面进行循环,爬行地址写入csv文件中。但是之前发布的一些代理IP不能使用的可能性更大,可以爬到前5页左右。

在验证代理IP通过添加进程池来验证每个代理的可行性IP验证方法即可。requests的session网络访问可以持续进行。

defverifyProxies(verify_url,file_path=FILE_NAME):

session=requests.session()

proxyFile=open(FILE_NAME,"r+")

csv_reader=csv.reader(proxyFile)

p=Pool(10)

forrowincsv_reader:

proxies={"http":"http://"+row[0]+":"+row[1]}

p.apply_async(verifyProxy,args=(verify_url,proxies,session))

p.close()

p.join()

proxyFile.close()

验证每个IP通过发送网页的方式GET请求,然后根据返回状态码进行判断,并执行相应的操作。在请求中设置timeout需要使用try-except抛出异常,否则超过timeout相应的过程将在设定值时终止。


*ipidea提供的服务必须在境外网络环境下使用

热门资讯