如何使用python+urllib库+代理IP访问网站
2023-06-13 09:17:26 时间
python 写爬虫获取数据资料是方便的,但是很多网站设置了反爬虫机制,最常见的就是限制 IP 频繁请求了,只要某个 IP 在单位时间内的请求次数超过一定值,网站就不再正常响应了,这时,我们的 python 爬虫就无法正常工作了。对于这种情况最简单的方式就是使用代理(proxy)。但是使用还是会出现一些问题,比如下面的例子
在爬虫端使用urllib.request爬取网站并且添加了代理池的时候,发现有些网站会出现“无法访问此网站”的情况(代理是可用的,防火墙已关闭),我们可以从以下一些方面找原因。
2、IP挂了(被反爬)
3、网站有反爬措施,最简单的是浏览器头验证
4、劣质代理(网速太慢根本打不开网页)
这里我们可以换个付费高质量的代理,并且通过python+urllib库+代理IP然后去访问网站,多次访问看下是否能成功。
#! -- encoding:utf-8 -- from urllib import request import threading # 导入threading库,用于多线程 import time # 导入time库,用于延时
#要访问的目标页面
targetUrl = “https://www.baidu.com” # 修改为百度
#代理服务器(产品官网 www.16yun.cn)
proxyHost = “t.16yun.cn” proxyPort = “31111”
#代理验证信息
proxyUser = “www.16yun.cn” proxyPass = “16ip”
proxyMeta = “http://%(user)s:%(pass)s@%(host)s:%(port)s” % { “host” : proxyHost, “port” : proxyPort, “user” : proxyUser, “pass” : proxyPass, }
proxy_handler = request.ProxyHandler({ “http” : proxyMeta, “https” : proxyMeta, })
opener = request.build_opener(proxy_handler)
request.install_opener(opener)
#定义一个锁对象,用于控制每200毫秒只能请求一次
lock = threading.Lock()
#定义一个函数,用于发起请求和打印响应
def get_url(): # 获取锁,如果锁被占用,就等待,直到锁释放 lock.acquire() resp = request.urlopen(targetUrl) # 发起请求 # 判断状态码是否为200,如果不是,打印错误信息 if resp.status_code == 200: print(resp.read()) # 打印响应内容 else: print(f"请求失败,状态码为{resp.status_code}") # 打印错误信息 time.sleep(0.2) # 延时200毫秒 # 释放锁,让其他线程可以获取锁 lock.release()
#定义一个列表,用于存放线程对象
threads = []
#创建10个线程,每个线程执行get_url函数
for i in range(10): t = threading.Thread(target=get_url) # 创建线程对象 threads.append(t) # 将线程对象添加到列表中
#启动所有线程
for t in threads: t.start()
#等待所有线程结束
for t in threads: t.join()
相关文章
- 二级Python选择题_二级python选择题题库
- Python获取时间戳_python爬虫时间戳
- python运行代码不成功_Python | PyCharm无法直接运行(Run)脚本
- python人工智能学习笔记_[Python] 人工智能与自然语言处理学习笔记(1)[通俗易懂]
- pythonrequests代理ip_python使用requests模块使用ip代理池
- Python编程 列表的操作(2)
- python 6行代码搞定图片批量重命名「建议收藏」
- python的datetime模块的实用功能
- python定义函数求和_Python定义函数实现累计求和操作
- python测试request代理IP是否替换
- 如何使用python+urllib库+代理IP爬取新闻数据
- 【测试开发】python系列教程:Python 推导式
- 【错误记录】Mac 中 IntelliJ IDEA 运行 Python 程序报错 ( No module named ‘numpy‘ )
- python-Python与SQLite数据库-使用Python执行SQLite查询(一)
- python定时器爬取豆瓣音乐Top榜歌名详解编程语言
- python对文件进行读写操作详解编程语言
- python获得linux物理内存大小详解编程语言
- Python学习:6.python内置函数详解编程语言
- Python学习:1.快速搭建python环境详解编程语言
- 掌握Python访问MySQL的新技能(python访问mysql)
- Python实例:小游戏20148
- Linux查看Python安装路径的方法(linux查看python安装路径)
- Python实现Oracle数据库连接(python连接oracle数据库)
- Linux下的Python开发技术之旅(linux下python开发)
- 用代理IP轻松存储在Redis中(代理ip存Redis)