python_requests的代理配置

文章目录

前言

大家好,我是yma16,本文分享配置python requests的代理配置

何以解忧,爬个ip用

来源:免费网站

可以参考快代理网站给出的ip
www.kuaidaili.com/free/inha/1...

抓取

python的urllib request库详解

Python的urllib库是用于操作URL的标准库之一,它提供了一个简单和方便的接口,用于处理各种URL的操作,例如发送HTTP请求,获取HTML内容,处理Cookie和错误处理等。urllib库包含了4个子模块,进行了相关的操作:

  1. urllib.request:用于发送HTTP/HTTPS请求和包含在其中的各种操作;
  2. urllib.error:包含由urllib.request生成的异常;
  3. urllib.parse:用于解析URL,主要是拆分和组合URL;
  4. urllib.robotparser:用于解析robots.txt文件,这是一个协议,用于告诉爬虫哪些页面可以抓取。

下面是一些常见的使用情况:

  1. 发送HTTP/HTTPS请求

使用urllib.request.urlopen()方法可以发送HTTP/HTTPS请求并获得响应,例如:

python 复制代码
import urllib.request

response = urllib.request.urlopen('http://www.python.org')
print(response.read().decode('utf-8'))
  1. 处理Cookie

使用urllib.request模块的HTTPCookieProcessor类可以处理Cookie。以下是一个示例:

python 复制代码
import http.cookiejar, urllib.request

# 创建cookiejar对象
cookie_jar = http.cookiejar.CookieJar()

# 创建HTTPCookieProcessor对象,并将cookiejar对象传入
cookie_processor = urllib.request.HTTPCookieProcessor(cookie_jar)

# 使用build_opener()方法创建opener对象,并将cookie_processor对象传入
opener = urllib.request.build_opener(cookie_processor)

# 使用urlopen()方法打开网页,此时便可以定位到包含Cookie的网页
opener.open('http://www.baidu.com')

# 通过cookiejar对象访问Cookie
for cookie in cookie_jar:
    print(cookie.name, cookie.value)
  1. 解析URL

使用urllib.parse模块的urlparse()、urlsplit()和urljoin()方法可以解析URL。以下是一个示例:

python 复制代码
import urllib.parse

url = 'https://www.python.org:8080/docs/index.html;abcd?def=456#789'
result = urllib.parse.urlsplit(url)
print(result)
  1. 错误处理

使用urllib.error模块的URLError和HTTPError类来处理HTTP请求时可能出现的错误,例如:

python 复制代码
import urllib.request, urllib.error

try:
    response = urllib.request.urlopen('http://www.pythonxyx.com')
except urllib.error.URLError as e:
    if hasattr(e, 'reason'):
        print('Failed to reach the server.')
        print('Reason:', e.reason)
    elif hasattr(e, 'code'):
        print('The server couldn\'t fulfill the request.')
        print('Error code:', e.code)
    else:
        print('Error :', e)

以上是urllib库的常见操作,还有很多其他的功能,可以根据需求进行使用。

urllib库访问

python 复制代码
    rq = request.Request(baseurl, headers=headers)  # 添加请求
    resp = request.urlopen(rq)  # 访问
    html = resp.read().decode('utf-8')

正则提取

python 复制代码
    compile_c="<td data-title=\"IP\">(.*?)</td>"
    compile_p="<td data-title=\"PORT\">(.*?)</td>"
    compile_s="<td data-title=\"匿名度\">(.*?)</td>"
    compile_k="<td data-title=\"类型\">(.*?)</td>"
    compile_l="<td data-title=\"位置\">(.*?)</td>"
    compile_v="<td data-title=\"响应速度\">(.*?)</td>"
    compile_t="<td data-title=\"最后验证时间\">(.*?)</td>"

整合

为防止503的错误,延迟2秒执行

python 复制代码
from urllib import request,parse
import re,time,xlwt
headers = {
    "user-agent": "****"# 根据浏览器上的填写
}
url='https://www.kuaidaili.com/free/inha/'



def auto_index():
    s=1
    for loc in range(1,50):
        index=str(loc)+'/'
        time.sleep(2)#先休息2秒
        s=urllib_request(url,index,s)#得到行数 不断传进去 写入excel不断循环
    worksheet.save("代理ip.xls")


def urllib_request(url,index,rows):#请求url 返回html
    baseurl=url+index
    print(baseurl)
    rq = request.Request(baseurl, headers=headers)  # 添加请求
    resp = request.urlopen(rq)  # 访问
    html = resp.read().decode('utf-8')
    return compile_html(html,rows)#跳转

def compile_html(html,sheetLocation):
    style=re.compile(r"<tbody>\s(.*?)\s</table>",re.S) # ip表
    result=re.findall(style,html)[0] # 第一个数据
    # print(result)
    compile_c="<td data-title=\"IP\">(.*?)</td>"
    compile_p="<td data-title=\"PORT\">(.*?)</td>"
    compile_s="<td data-title=\"匿名度\">(.*?)</td>"
    compile_k="<td data-title=\"类型\">(.*?)</td>"
    compile_l="<td data-title=\"位置\">(.*?)</td>"
    compile_v="<td data-title=\"响应速度\">(.*?)</td>"
    compile_t="<td data-title=\"最后验证时间\">(.*?)</td>"
    #ip
    ipText=re.compile(compile_c,re.S)
    ip_text = re.findall(ipText, result)
    #端口
    portText = re.compile(compile_p,re.S)
    port_text= re.findall(portText, result)
    #匿名度
    securityText = re.compile(compile_s, re.S)
    s_text = re.findall(securityText, result)
    #协议
    kindText = re.compile(compile_k, re.S)
    k_text = re.findall(kindText, result)
    #位置
    locText = re.compile(compile_l, re.S)
    l_text = re.findall(locText, result)
    #速度
    vText = re.compile(compile_v, re.S)
    v_text = re.findall(vText, result)
    #更新时间
    tText = re.compile(compile_t, re.S)
    t_text = re.findall(tText, result)
    length=len(ip_text)
    for i in range(0,length):#左闭右开
        print(ip_text[i], port_text[i], s_text[i], l_text[i], k_text[i],v_text[i], t_text[i])
        print(sheetLocation,i)
        proxy_excel.write(sheetLocation,0,ip_text[i])
        proxy_excel.write(sheetLocation,1,port_text[i])
        proxy_excel.write(sheetLocation,2,s_text[i])
        proxy_excel.write(sheetLocation,3,l_text[i])
        proxy_excel.write(sheetLocation,4,k_text[i])
        proxy_excel.write(sheetLocation,5,v_text[i])
        proxy_excel.write(sheetLocation,6,t_text[i])
        sheetLocation+=1#写完一行加1
    return sheetLocation#返回列
    # print(ip_text,port_text,s_text,l_text,k_text,t_text)

def write_excel(worksheet):#创建文件
    proxy_excel = worksheet.add_sheet("proxySheet")
    proxy_excel.write(0, 0, 'ip')
    proxy_excel.write(0, 1, 'port')
    proxy_excel.write(0, 2, '安全性')
    proxy_excel.write(0, 3, '地区')
    proxy_excel.write(0, 4, '协议')
    proxy_excel.write(0, 5, '速度')
    proxy_excel.write(0, 6, '更新时间')
    return proxy_excel
worksheet = xlwt.Workbook(encoding='utf-8')
proxy_excel=write_excel(worksheet)
auto_index()

结果

获取了735条代理ip信息

结束

本文分享到这结束,如有错误或者不足之处欢迎指出,感谢大家的阅读!

相关推荐
susu10830189113 分钟前
vue3中父div设置display flex,2个子div重叠
前端·javascript·vue.js
小镇程序员3 小时前
vue2 src_Todolist全局总线事件版本
前端·javascript·vue.js
疯狂的沙粒3 小时前
对 TypeScript 中函数如何更好的理解及使用?与 JavaScript 函数有哪些区别?
前端·javascript·typescript
瑞雨溪3 小时前
AJAX的基本使用
前端·javascript·ajax
力透键背3 小时前
display: none和visibility: hidden的区别
开发语言·前端·javascript
程楠楠&M4 小时前
node.js第三方Express 框架
前端·javascript·node.js·express
weiabc4 小时前
学习electron
javascript·学习·electron
想自律的露西西★4 小时前
用el-scrollbar实现滚动条,拖动滚动条可以滚动,但是通过鼠标滑轮却无效
前端·javascript·css·vue.js·elementui·前端框架·html5
白墨阳4 小时前
vue3:瀑布流
前端·javascript·vue.js
霍先生的虚拟宇宙网络5 小时前
webp 网页如何录屏?
开发语言·前端·javascript