文章目录
很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:101677771
许多python爬虫爱好者在爬虫爬取过程中或多或少都有被爬取网址封禁IP的时候,博主本人也是深受其害,为此才有了这篇博文的诞生,让更多爬虫爱好者不再受害。希望此教程对你们有所帮助,那我这篇博文也就有意义了。
一、网页查看
本次构造IP代理池,我们的目标是快代理
快代理首页,虽然有着免费代理,但都是HTTP类型的,而在开放代理中不仅有着HTTP还有HTTPS类型的免费代理
打开控制台查看数据位置
可以发现IP代理数据不是动态加载的,这样就好办了,请看下面的代码分析
多页爬取,大家都是清华北大的下图应该看的懂吧。ο(=•ω<=)ρ⌒☆
二、完整代码及代码分析
import requests
from bs4 import BeautifulSoup
import time
#列表(最后的ip代理数据保存再列表中)
proxies_list = []
#爬取
def download(response):
#引入全局变量
global proxies_list
#使用bs4的lxml解析
data_list = BeautifulSoup(response.text, "lxml")
#根据select选择器定位,可以参考图1
tr_list = data_list.select("#freelist > table > tbody")
tr_list = BeautifulSoup(str(tr_list), "lxml")
#遍历得到里面的每个tr标签再解析取值
for tr in tr_list.find_all("tr"):
#字典,用来存储ip代理数据
proxies_dict = {}
td = BeautifulSoup(str(tr), "lxml")
#有的代理类型只有http,但有的既有http又有https,而且有https的一定支持http
#所以以下类型如果只支持http就用http表示,两种都支持就用https表示
try:
#根据","分割取https,如果有则取到,没有抛异常,就不分割即为http类型
http_type = td.find(attrs={"data-title": "类型"}).text.split(",")[1].strip()
except:
http_type = td.find(attrs={"data-title": "类型"}).text
#参考图2
#根据自定义参数定位,取值
ip = td.find(attrs={"data-title": "IP"}).text
port = td.find(attrs={"data-title": "PORT"}).text
# print(http_type, ip, port)
#添加到字典
proxies_dict[http_type] = ip + ":" + port
#添加到列表
proxies_list.append(proxies_dict)
#开始
if __name__ == "__main__":
#进行多页爬取
for i in range(3):
url = "https://www.kuaidaili.com/ops/proxylist/" + str(i+1)
#发送get请求
response = requests.get(url=url)
download(response)
print(proxies_list)
#ip代理个数
print(len(proxies_list))
三、图片辅助分析
图1
图2
图3