青海省公路建设管理局门户网站,综合门户网站建设,西安池乐科技网页设计,通辽做网站的公司前言
嗨喽~大家好呀#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取
一、简介
爬虫中为什么需要使用代理
一些网站会有相应的反爬虫措施#xff0c;例如很多网站会检测某一段时间某个IP的访问次数#xff0c;如果访问频率…前言
嗨喽~大家好呀这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取
一、简介
爬虫中为什么需要使用代理
一些网站会有相应的反爬虫措施例如很多网站会检测某一段时间某个IP的访问次数如果访问频率太快以至于看起来不像正常访客它可能就会禁止这个IP的访问。
所以我们需要设置一些代理IP每隔一段时间换一个代理IP就算IP被禁止依然可以换个IP继续爬取。
代理的分类 正向代理代理客户端获取数据。正向代理是为了保护客户端防止被追究责任。 反向代理代理服务器提供数据。反向代理是为了保护服务器或负责负载均衡。
免费代理ip提供网站 http://www.goubanjia.com/ 西刺代理 快代理
匿名度 透明知道是代理ip也会知道你的真实ip 匿名知道是代理ip不会知道你的真实ip 高匿不知道是代理ip不会知道你的真实ip
类型: http:只能请求http开头的url https:只能请求https开头的url
示例
import requests遇到问题没人解答小编创建了一个Python学习交流QQ群926207505
寻找有志同道合的小伙伴互帮互助,群里还有不错的视频学习教程和PDF电子书
headers {User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36
}
url https://www.baidu.com/s?wdip# 不同的代理IP,代理ip的类型必须和请求url的协议头保持一致
proxy_list [{http: 112.115.57.20:3128}, {http: 121.41.171.223:3128}
]# 随机获取代理IP
proxy random.choice(proxy_list)page_text requests.get(urlurl,headersheaders,proxiesproxy).textwith open(ip.html,w,encodingutf-8) as fp:fp.write(page_text)print(over!)二、IP池
1、免费IP池
从西刺代理上面爬取IP迭代测试能否使用
建立一个自己的代理IP池随时更新用来抓取网站数据 遇到问题没人解答小编创建了一个Python学习交流QQ群926207505
寻找有志同道合的小伙伴互帮互助,群里还有不错的视频学习教程和PDF电子书import requests
from lxml import etree
import time
import random
from fake_useragent import UserAgentclass GetProxyIP(object):def __init__(self):self.url https://www.xicidaili.com/nn/self.proxies {http: http://163.204.247.219:9999,https: http://163.204.247.219:9999}# 随机生成User-Agentdef get_random_ua(self):ua UserAgent() # 创建User-Agent对象useragent ua.randomreturn useragent# 从西刺代理网站上获取随机的代理IPdef get_ip_file(self, url):headers {User-Agent: self.get_random_ua()}html requests.get(urlurl, proxiesself.proxies, headersheaders, timeout5).content.decode(utf-8, ignore)parse_html etree.HTML(html) tr_list parse_html.xpath(//tr) # 基准xpath匹配每个代理IP的节点对象列表for tr in tr_list[1:]:ip tr.xpath(./td[2]/text())[0]port tr.xpath(./td[3]/text())[0] self.test_proxy_ip(ip, port) # 测试ip:port是否可用# 测试抓取的代理IP是否可用def test_proxy_ip(self, ip, port):proxies {http: http://{}:{}.format(ip, port),https: https://{}:{}.format(ip, port), }test_url http://www.baidu.com/try:res requests.get(urltest_url, proxiesproxies, timeout8)if res.status_code 200:print(ip, :, port, Success)with open(proxies.txt, a) as f:f.write(ip : port \n)except Exception as e:print(ip, port, Failed)def main(self):for i in range(1, 1001):url self.url.format(i)self.get_ip_file(url)time.sleep(random.randint(5, 10))if __name__ __main__:spider GetProxyIP()spider.main()从IP池中取IP也就是在爬虫程序中从文件随机获取代理IP
import random
import requestsclass BaiduSpider(object):def __init__(self):self.url http://www.baidu.com/self.headers {User-Agent: Mozilla/5.0}self.flag 1def get_proxies(self):with open(proxies.txt, r) as f:result f.readlines() # 读取所有行并返回列表proxy_ip random.choice(result)[:-1] # 获取了所有代理IPL proxy_ip.split(:)proxy_ip {http: http://{}:{}.format(L[0], L[1]),https: https://{}:{}.format(L[0], L[1])}return proxy_ipdef get_html(self):proxies self.get_proxies()if self.flag 3:try:html requests.get(urlself.url, proxiesproxies, headersself.headers, timeout5).textprint(html)except Exception as e:print(Retry)self.flag 1self.get_html()if __name__ __main__:spider BaiduSpider()spider.get_html()2.收费代理API
写一个获取收费开放API代理的接口 遇到问题没人解答小编创建了一个Python学习交流QQ群926207505
寻找有志同道合的小伙伴互帮互助,群里还有不错的视频学习教程和PDF电子书import requests
from fake_useragent import UserAgentua UserAgent() # 创建User-Agent对象
useragent ua.random
headers {User-Agent: useragent}def ip_test(ip):url http://www.baidu.com/ip_port ip.split(:)proxies {http: http://{}:{}.format(ip_port[0], ip_port[1]),https: https://{}:{}.format(ip_port[0], ip_port[1]),}res requests.get(urlurl, headersheaders, proxiesproxies, timeout5)if res.status_code 200:return Trueelse:return False# 提取代理IP
def get_ip_list():# 快代理https://www.kuaidaili.com/doc/product/dps/api_url http://dev.kdlapi.com/api/getproxy/?orderid946562662041898num100protocol1method2an_an1an_ha1sep2html requests.get(api_url).content.decode(utf-8, ignore)ip_port_list html.split(\n)for ip in ip_port_list:with open(proxy_ip.txt, a) as f:if ip_test(ip):f.write(ip \n)if __name__ __main__:get_ip_list()3.私密代理
语法结构
用户名和密码会在给API_URL的时候给。不是自己的账号和账号密码。
proxies {
协议:协议://用户名:密码IP:端口号
}
proxies {http:http://用户名:密码IP:端口号,https:https://用户名:密码IP:端口号
}
proxies {http: http://309435365:szayclhp106.75.71.140:16816,https:https://309435365:szayclhp106.75.71.140:16816,
}获取开放代理的接口
import requests
from fake_useragent import UserAgentua UserAgent() # 创建User-Agent对象
useragent ua.random
headers {User-Agent: useragent}遇到问题没人解答小编创建了一个Python学习交流QQ群926207505
寻找有志同道合的小伙伴互帮互助,群里还有不错的视频学习教程和PDF电子书
def ip_test(ip):url https://blog.csdn.net/qq_34218078/article/details/90901602/ip_port ip.split(:)proxies {http: http://1786088386:b95djiha{}:{}.format(ip_port[0], ip_port[1]),https: http://1786088386:b95djiha{}:{}.format(ip_port[0], ip_port[1]),}res requests.get(urlurl, headersheaders, proxiesproxies, timeout5)if res.status_code 200:print(OK)return Trueelse:print(res.status_code)print(错误)return False# 提取代理IP
def get_ip_list():# 快代理https://www.kuaidaili.com/doc/product/dps/api_url http://dps.kdlapi.com/api/getdps/?orderid986603271748760num1000signaturez4a5b2rpt062iejd6h7wvox16si0f7ctpt1sep2html requests.get(api_url).content.decode(utf-8, ignore)ip_port_list html.split(\n)for ip in ip_port_list:with open(proxy_ip.txt, a) as f:if ip_test(ip):f.write(ip \n)if __name__ __main__:get_ip_list()思路 写一个类 get_ip() requests请求接口得到ip和port test_ip()请求某一网站根据状态码或in判断是否有某一内容来判断此ip是否可用,返回Ture和False即可 save_ip()测试成功后保存;
尾语
最后感谢你观看我的文章呐~本次航班到这里就结束啦
希望本篇文章有对你带来帮助 有学习到一点知识~
躲起来的星星也在努力发光你也要努力加油让我们一起努力叭。 最后宣传一下呀~更多源码、资料、素材、解答、交流皆点击下方名片获取呀