【爬虫笔记】Python爬虫简单运用爬取代理IP
一、前言
近些年来,网络上的爬虫越来越多,很多网站都针对爬虫进行了限制,封禁了一些不规则的请求。为了实现正常的网络爬虫任务,爬虫常用代理IP来隐藏自己的真实IP,避免被服务器封禁。本文将介绍如何使用Python爬虫来获取代理IP,以及如何在爬虫中使用代理IP。
二、获取代理IP
获取代理IP有两种方式:免费代理IP网站和收费代理IP服务。免费代理IP网站通常提供一些免费的代理IP,但是这些代理IP质量很不稳定,很容易被封禁或失效;收费代理IP服务则提供稳定、可靠的代理IP,但需要付费购买。由于本文主要介绍如何使用Python爬虫,因此我们将使用免费代理IP网站进行代理IP的获取。
具体来说,我们可以使用爬虫抓取一些免费代理IP网站上的代理IP列表。这里以站大爷免费代理IP为例,具体步骤如下:
1. 打开站大爷代理网站(https://www.zdaye.com/),选择代理IP类型和位置,点击搜索按钮。
2. 打开开发者工具(F12),进入网络选项卡,点击清空按钮,再点击“获取更多内容”按钮,观察是否有新的请求被发送。
3. 发现一个名为“nn”的请求,请求的URL为http://www.zdaye.com/nn/1,其中“nn”表示高匿代理IP,而数字“1”表示页码。我们可以通过修改页码来获取不同页的代理IP。
4. 在请求头中添加“User-Agent”字段,模拟浏览器请求,避免被服务器拒绝。
5. 抓取响应中的HTML代码,使用正则表达式或BeautifulSoup库从中提取代理IP及其端口号。
下面是具体的Python代码实现:
```python
import requests
from bs4 import BeautifulSoup
import re
# 抓取代理IP列表
def fetch_proxy_ips():
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.36'}
url_template = 'http://www.xzdaye.com/nn/{}'
proxy_ips = []
for page in range(1, 11):
url = url_template.format(page)
resp = requests.get(url, headers=headers)
soup = BeautifulSoup(resp.text, 'html.parser')
trs = soup.find_all('tr')
for tr in trs[1:]:
tds = tr.find_all('td')
proxy_ip = tds[1].text + ':' + tds[2].text
proxy_ips.append(proxy_ip)
return proxy_ips
# 测试代理IP是否可用
def test_proxy_ip(proxy_ip):
url = 'http://httpbin.org/ip'
proxies = {
'http': 'http://' + proxy_ip,
'https': 'https://' + proxy_ip
}
try:
resp = requests.get(url, proxies=proxies, timeout=5)
resp.raise_for_status()
return True
except:
return False
# 获取可用的代理IP
def get_valid_proxy_ips():
proxy_ips = fetch_proxy_ips()
valid_proxy_ips = []
for proxy_ip in proxy_ips:
if test_proxy_ip(proxy_ip):
valid_proxy_ips.append(proxy_ip)
return valid_proxy_ips
print(get_valid_proxy_ips())
```
在上面的代码中,我们首先使用fetch_proxy_ips()函数抓取西刺代理网站上的前10页高匿代理IP列表,然后使用test_proxy_ip()函数测试每个代理IP是否可用(测试URL为http://httpbin.org/ip),最后使用get_valid_proxy_ips()函数返回可用的代理IP列表。
三、使用代理IP
使用代理IP可以在requests库中指定proxies参数。proxies参数是一个字典类型,其中键名是协议(http或https),键值是代理IP及其端口号。例如,如果我们要使用代理IP地址为“1.2.3.4”,端口号为“5678”的代理服务器,则proxies参数应该为:
```python
proxies = {
'http': 'http://1.2.3.4:5678',
'https': 'https://1.2.3.4:5678'
}
```
下面是一个简单的爬虫示例,使用代理IP爬取JD商品搜索页面:
```python
import requests
# 使用代理IP爬取京东商品搜索页面
def crawl_jd_goods(query, proxy_ip):
url_template = 'https://search.jd.com/Search?keyword={}&enc=utf-8&page={}'
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.36'}
proxies = {
'http': 'http://' + proxy_ip,
'https': 'https://' + proxy_ip
}
for page in range(1, 6):
url = url_template.format(query, page)
resp = requests.get(url, headers=headers, proxies=proxies)
print(resp.status_code)
print(resp.text)
# 获取可用的代理IP
proxy_ips = get_valid_proxy_ips()
# 使用第一个可用的代理IP爬取京东商品搜索页面
query = 'Python编程'
proxy_ip = proxy_ips[0]
crawl_jd_goods(query, proxy_ip)
```
在上面的代码中,我们首先获取可用的代理IP列表,然后使用第一个可用的代理IP爬取京东商品搜索页面(搜索关键字为“Python编程”)。
需要注意的是,代理IP并不是万能的,在一些反爬虫机制非常强大的网站上,即使使用代理IP也很容易被封禁。此外,一些代理IP质量较差,访问速度较慢,甚至会返回错误响应。因此,在实际使用中需要根据具体情况选择可用的代理IP。
【爬虫笔记】Python爬虫简单运用爬取代理IP的更多相关文章
- python爬虫爬取代理IP
# #author:wuhao # #--*------------*-- #-****#爬取代理IP并保存到Excel----#爬取当日的代理IP并保存到Excel,目标网站xicidaili.co ...
- PYTHON 爬虫笔记八:利用Requests+正则表达式爬取猫眼电影top100(实战项目一)
利用Requests+正则表达式爬取猫眼电影top100 目标站点分析 流程框架 爬虫实战 使用requests库获取top100首页: import requests def get_one_pag ...
- scrapy爬虫笔记(三)------写入源文件的爬取
开始爬取网页:(2)写入源文件的爬取 为了使代码易于修改,更清晰高效的爬取网页,我们将代码写入源文件进行爬取. 主要分为以下几个步骤: 一.使用scrapy创建爬虫框架: 二.修改并编写源代码,确定我 ...
- [爬虫]用python的requests模块爬取糗事百科段子
虽然Python的标准库中 urllib2 模块已经包含了平常我们使用的大多数功能,但是它的 API 使用起来让人感觉不太好,而 Requests 自称 “HTTP for Humans”,说明使用更 ...
- 【Python】简单实现爬取小说《天龙八部》,并在页面本地访问
背景 很多人说学习爬虫是提升自己的一个非常好的方法,所以有了第一次使用爬虫,水平有限,依葫芦画瓢,主要作为学习的记录. 思路 使用python的requests模块获取页面信息 通过re模块(正则表达 ...
- Python超简单的爬取网站中图片
1.首先导入相关库 import requests import bs4 import threading #用于多线程爬虫,爬取速度快,可以完成多页爬取 import os 2.使用bs4获取htm ...
- 爬虫爬取代理IP池及代理IP的验证
最近项目内容需要引入代理IP去爬取内容. 为了项目持续运行,需要不断构造.维护.验证代理IP. 为了绕过服务端对IP 和 频率的限制,为了阻止服务端获取真正的主机IP. 一.服务器如何获取客户端IP ...
- python代理池的构建3——爬取代理ip
上篇博客地址:python代理池的构建2--代理ip是否可用的处理和检查 一.基础爬虫模块(Base_spider.py) #-*-coding:utf-8-*- ''' 目标: 实现可以指定不同UR ...
- 使用Python爬取代理ip
本文主要代码用于有代理网站http://www.kuaidaili.com/free/intr中的代理ip爬取,爬虫使用过程中需要输入含有代理ip的网页链接. 测试ip是否可以用 import tel ...
- python 批量爬取代理ip
import urllib.request import re import time import random def getResponse(url): req = urllib.request ...
随机推荐
- 【Python&GIS】判断图片中心点/经纬度点是否在某个面内
Python的exifread库可以获取图片中的源数据信息,包括经纬度.相机厂商.曝光时间.焦距.拍摄时间.拍摄地点等等信息.我们可以通过exifread库从图片中获取图片的经纬度,再通过shape ...
- C/CPP在命令行中生成DLL文件
简单的写一个C调用DLL(动态链接库)的例子. 创建3个.c文件备用 test.c 1 #include <stdio.h> 2 3 //这里声明,表示来自dll文件. 4 extern ...
- STL-vector(ACM)
1.长度可变的数组 2.这里不是很懂,v.size() 代码源里说这个v.size()是无符号类型的,使用时要说明类型, 但是我在使用时并没有出现warning,有大佬知道原因吗? 前置板子 3.ve ...
- 使用containerd从0搭建k8s(kubernetes)集群
准备环境 准备两台服务器节点,如果需要安装虚拟机,可以参考<wmware和centos安装过程> 机器名 IP 角色 CPU 内存 centos01 192.168.109.130 mas ...
- C++调用tensorflow模型
C++ 和python的混合编程 windows + vs 新建一个工程,在工程属性中添加如下的几个 C:\Users\[user_name]\Anaconda3\include C:\Users\[ ...
- 前端Vue自定义简单好用商品分类列表组件 侧边栏商品分类组件
前端Vue自定义简单好用商品分类列表组件 侧边栏商品分类组件 , 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=13148 效果 ...
- 记一次.Net分布式事务死锁现象以及解决方法
在本文中,将介绍一次遇到的.Net分布式事务死锁现象以及解决方法.我们将首先了解事务框架的构成,然后分析导致死锁的代码,最后提出解决方法. 事务框架 本次开发框架JMSFramework将分布式事务划 ...
- C++(类成员的访问控制)
访问控制 如下代码,Student这个类的所有成员我们都可以调用,但是我们不想让被人调用Print1这个方法该怎么? struct Student { int age; int sex; void P ...
- 【WebGL系列-03】获取shader变量地址及赋值
获取shader变量地址及赋值 上一节创建了WebGL程序对象,创建好program对象后,对象中包含顶点着色器和片元着色器,着色器中含有变量,我们需要对其进行赋值后才能够进行绘制. 着色器代码如下: ...
- Redis 主从同步原理
一.什么是主从同步? 主从同步,就是将数据冗余备份,主库(Master)将自己库中的数据,同步给从库(Slave). 从库可以一个,也可以多个,如图所示: 二.为什么需要主从同步? Redis 虽然有 ...