当前位置: 首页 > news >正文

中诺建设集团有限公司网站大新网站制作

中诺建设集团有限公司网站,大新网站制作,网站建设横幅标语,浙江注册公司网站目录 前言 1. 搭建免费代理IP爬虫 2. 将获取到的代理IP存储到数据库中 3. 构建一个代理IP池 4. 实现调度器来调度代理IP池 5. 实现带有代理IP池的爬虫 总结 前言 在网络爬虫中#xff0c;代理IP池是一个非常重要的组件。由于许多网站对单个IP的请求有限制#xff0c;…目录 前言 1. 搭建免费代理IP爬虫 2. 将获取到的代理IP存储到数据库中 3. 构建一个代理IP池 4. 实现调度器来调度代理IP池 5. 实现带有代理IP池的爬虫 总结 前言 在网络爬虫中代理IP池是一个非常重要的组件。由于许多网站对单个IP的请求有限制如果我们一直使用同一个IP去请求数据我们很快就会被封禁。因此我们需要一个代理IP池以便我们可以轮流使用多个代理IP以避免被封禁的风险。 在本文中我们将使用Python来构建一个代理IP池。我们将使用requests和BeautifulSoup库来从互联网上抓取免费代理IP并将它们存储到一个代理IP池中。然后我们将使用这个代理IP池来访问我们需要的数据。 本文内容涵盖以下几个方面 搭建免费代理IP爬虫将获取到的代理IP存储到数据库中构建一个代理IP池实现调度器来调度代理IP池实现带有代理IP池的爬虫 本文将涉及到一些网络编程的知识如果您还不熟悉这些知识请先补充相关的知识。同时本文代码也是在Python 3.8环境中运行的。 1. 搭建免费代理IP爬虫 我们需要从互联网上抓取免费代理IP这里我们使用的是站大爷代理ip网站上的免费代理IP。我们将使用requests和BeautifulSoup来实现爬虫。 爬虫代码如下所示 import requests from bs4 import BeautifulSoupdef get_proxy_ips():Get the proxy IPs from zdaye.comurl http://www.zdaye.com/headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3}html requests.get(url, headersheaders).textsoup BeautifulSoup(html, html.parser)ips soup.find_all(tr)proxy_ips []for ip in ips[1:]:lst ip.text.strip().split(\n)proxy_ip {ip: lst[0], port: lst[1]}proxy_ips.append(proxy_ip)return proxy_ips 2. 将获取到的代理IP存储到数据库中 我们需要将获取到的代理IP存储到数据库中以便我们在后续的处理中使用。在这里我们使用MongoDB作为我们的数据库它是一个非常流行的文档型数据库特别适合存储非结构化数据。 我们需要安装pymongo库来连接MongoDB。安装命令如下 pip install pymongo 接下来我们需要定义一个函数来将代理IP存储到MongoDB中。代码如下所示 from pymongo import MongoClientdef save_proxy_ips(proxy_ips):Save the proxy IPs to MongoDBclient MongoClient(mongodb://localhost:27017/)db client[proxy_ips]coll db[ips]coll.delete_many({})coll.insert_many(proxy_ips) 上面的代码将获取到的代理IP列表作为参数传递然后将代理IP列表存储到名为“proxy_ips”的数据库中的“ips”集合中。 3. 构建一个代理IP池 现在我们已经有了一个爬虫和一个数据库接下来我们将构建一个代理IP池。在这个代理IP池中我们将从数据库中随机选择一个代理IP并使用它来访问我们需要的数据。如果代理IP无法使用则需要从池中删除该代理IP。如果池中的代理IP数量太少则需要重新从互联网上抓取免费代理IP并将其存储到数据库中。 实现代码如下所示 import randomclass ProxyPool:def __init__(self, threshold5):Initialize the proxy poolself.threshold thresholdself.client MongoClient(mongodb://localhost:27017/)self.db self.client[proxy_ips]self.coll self.db[ips]def get_proxy_ip(self):Get a random proxy IP from the poolcount self.coll.count_documents({})if count 0:return Noneproxy_ips self.coll.find({}, {_id: 0})ips [proxy_ip for proxy_ip in proxy_ips]proxy_ip random.choice(ips)ip http:// proxy_ip[ip] : proxy_ip[port]return {http: ip}def delete_proxy_ip(self, proxy_ip):Delete the proxy IP from the poolself.coll.delete_one(proxy_ip)def check_proxy_ip(self, proxy_ip):Check if the given proxy IP is availableproxies {http: http:// proxy_ip[ip] : proxy_ip[port]}try:requests.get(https://www.baidu.com/, proxiesproxies, timeout5)return Trueexcept:return Falsedef update_pool(self):Update the proxy poolcount self.coll.count_documents({})if count self.threshold:proxy_ips get_proxy_ips()save_proxy_ips(proxy_ips) 上面的代码中我们定义了一个名为ProxyPool的类。这个类有四个方法 get_proxy_ip从代理IP池中获取一个随机代理IP。delete_proxy_ip从代理IP池中删除一个代理IP。check_proxy_ip检查给定的代理IP是否可用。update_pool检查池中的代理IP数量是否低于阈值如果低于阈值则从互联网上获取新的代理IP列表并将其存储到数据库中。 值得注意的是我们使用了MongoDB作为代理IP池的存储介质。因此我们需要安装MongoDB数据库并确保它在运行。 4. 实现调度器来调度代理IP池 为了使用代理IP池我们需要实现一个调度器来调度代理IP池。调度器需要获取一个随机的代理IP并将其传递给请求。如果请求返回状态码为403表示无权访问则需要从代理IP池中删除该代理IP并重新获取一个代理IP。 实现代码如下所示 class Scheduler:def __init__(self):self.proxy_pool ProxyPool()def request(self, url):Send a request to the given url using a random proxy IPwhile True:proxy_ip self.proxy_pool.get_proxy_ip()if proxy_ip is None:return Nonetry:response requests.get(url, proxiesproxy_ip, timeout5)if response.status_code 200:return responseelif response.status_code 403:self.proxy_pool.delete_proxy_ip(proxy_ip)else:continueexcept:self.proxy_pool.delete_proxy_ip(proxy_ip)def run(self):Run the scheduler to update the proxy poolself.proxy_pool.update_pool() 上面的代码中我们定义了一个名为Scheduler的类。这个类有两个方法 request使用随机代理IP发送请求。run运行调度器来更新代理IP池。 当我们向调度器发出请求时调度器将从代理IP池中获取一个随机代理IP并将其作为请求的代理IP。如果请求返回状态码为200则说明代理IP可用可以将响应返回给调用者。如果状态码为403则需要从代理IP池中删除该代理IP并重新获取一个代理IP。如果请求发生异常则也需要从代理IP池中删除该代理IP。 5. 实现带有代理IP池的爬虫 现在我们已经有了一个代理IP池和一个调度器接下来我们将实现一个带有代理IP池的爬虫。在这个爬虫中我们将使用调度器来调度代理IP池并将获取到的数据存储到MongoDB数据库中。 实现代码如下所示 import timeclass Spider:def __init__(self):self.scheduler Scheduler()self.client MongoClient(mongodb://localhost:27017/)self.db self.client[data]self.coll self.db[info]def crawl(self):Crawl data using the proxy poolwhile True:response self.scheduler.request(https://www.example.com/)if response is not None:html response.text# parse the html to get the datadata {}self.coll.insert_one(data)time.sleep(1)def run(self):Run the spider to crawl datawhile True:self.scheduler.run()self.crawl()time.sleep(10) 上面的代码中我们定义了一个名为Spider的类。这个类有两个方法 crawl使用代理IP池来爬取数据并将数据存储到MongoDB数据库中。run运行爬虫来爬取数据。 当我们运行爬虫时它将首先运行调度器来更新代理IP池。然后它将使用代理IP池来爬取数据并将数据存储到MongoDB数据库中。最后它将休眠10秒钟然后重复这个过程。 总结 在本文中我们使用Python来构建了一个代理IP池。我们首先使用requests和BeautifulSoup库来从互联网上抓取免费代理IP并将其存储到MongoDB数据库中。然后我们构建了一个代理IP池从中随机选择代理IP并使用它来访问我们需要的数据。如果代理IP无法使用则从池中删除该代理IP。如果池中的代理IP数量太少则重新从互联网上获取新的代理IP列表。 最后我们实现了一个带有代理IP池的爬虫使用调度器来调度代理IP池。该爬虫将获取数据并将数据存储到MongoDB数据库中。
http://www.huolong8.cn/news/178550/

相关文章:

  • 广东建设执业网站重庆 机械有限公司 沙坪坝网站建设
  • 做网站服务公司长沙网站建设长沙
  • 网站三个月没排名优秀个人网站设计模板
  • 安徽国华建设工程项目管理有限公司网站妇联加强网站平台建设
  • 领优惠卷的网站怎么做推广公司好做吗
  • 自己电脑可以做网站服务器吗wordpress 不能发布文章
  • 贵阳公司网站建立上海建筑网站
  • 苏州和城乡建设局网站首页百度怎么对网站处罚
  • 东莞免费企业网站模板推广新乡网站建设waterseo
  • 专门做衣服特卖的网站海南综合网站
  • 做视频网站如何赚钱照片书哪个网站做的好
  • wordpress tag找不到优化网站视频
  • 安装discuz x 3.1 网站虚拟主机的要求ios软件下载网站
  • 做个中英文网站多少钱wordpress菜单突然拉不出
  • 太原建站培训wordpress做h5
  • 宜兴做网站哪家好上海网站建设专业公司排名
  • 个人网站趋向河北住房和城乡建设局网站首页
  • 国产做网站局域网怎么做网站
  • 网站主页面最开始在哪里做衣服搭配网站建设
  • 响应式网站示例网站建设佰首选金手指二五
  • win8怎么建设网站网址导航可以卸载吗
  • 最实用的手机app软件成都网站营销seo多少费用
  • 兰州网站建设运营方案动漫设计在哪里可以学
  • php 小企业网站 cmswordpress建设论坛
  • 长沙网站优化公司东营建设有限公司
  • 中铁建设集团有限公司网站wordpress路由规则
  • 建设企业网站需要了解什么办公室装修风格
  • 如何做个网站做cpa国外的网站需要备案吗
  • 如何做网站 seo个人博客网站设计模板
  • 网站被k恢复青岛当地的做公司网站的